2015-11-24 55 views
0

我有一個Angular UI選擇,用於根據所選選項切換一些複選框(使用ng-repeat生成)。當使用Angular UI選擇模型時發生意外的變化

複選框也可以手動切換,這就是出現問題的地方。

情況如下:

  1. 選擇一個選項。某些複選框基於$scope.recipes.available型號上指定選項的ingredients屬性進行切換。
  2. 手動切換附加複選框。
  3. 在select上選擇不同的選項。相應的複選框被正確切換。
  4. 切換回第一個選定的選項。除了僅切換最初在ingredients屬性中指定的複選框,手動修改的複選框也會被切換。在調試時,我發現ingredients屬性已被修改。

這個plunkr演示了這個問題。

到目前爲止,在閱讀了無數的範圍問題(我是Angular的新手)並且反覆嘗試重構我的代碼之後,我一直無法解決這個問題。

在繼續並嘗試重構代碼一次之前,我想了解這裏發生了什麼。

爲什麼要修改ingredients屬性?

回答

0

您的bundles數組正在您的toggleBundleSelection函數中更新。當配方選擇改變時,沒有什麼會重置陣列。由於bundle位於$ scope上,因此在控制器實例的生命週期中保留這些值。

+0

當食譜改變我做'$ scope.bundles.selected = $ scope.recipes.available [$ selectedRecipe] .ingredients;'。不應該重置'$ scope.bundles.selected'嗎? – excentris

+0

啊,錯過了。你不應該分配一個數組到另一個。你會想要設置它等於這樣的副本:$ scope.bundles.selected = angular.copy($ scope.recipes.available [$ selectedRecipe] .ingredients); – jbrown

+0

確實有用(謝謝!),但我仍不明白爲什麼它是必要的。我將成分的內容分配給'$ scope.bundles.selected',而不是相反...... – excentris

相關問題