我最近花了4個多小時才弄清楚爲什麼我的ng-model
指令與ng-options
結合使用沒有正確綁定到我的控制器中的屬性。 <select>
元素正在被正確初始化 - 從控制器(父)範圍接收一個值。但子範圍沒有正確更新父範圍。檢查出的下列問題和plunkers後,我就能夠制定了「變通」針對此問題:AngularJs避免範圍問題
Helpful stackoverflow question 1
Helpful stackoverflow question 2
我發現財產,我結合在我的<select>
元素中綁定到控制器的子範圍內的同名屬性 - 因此,該值沒有按照控制器範圍內的預期反映出來。改變
<select ng-options="asset as asset.Name for asset in allAssets" ng-model="selectedAsset" ng-change="lookupAssetPermissions()"></select>
到
<select ng-options="asset as asset.Name for asset in allAssets" ng-model="$parent.selectedAsset" ng-change="lookupAssetPermissions()"></select>
後在selectedAsset
值被正確地綁定到屬性在控制器的範圍(如在ng-change
事件處理程序看到的)。我的元素的整個背景是:
<!---outer div has controller level scope----->
<div>
<!---inner div creates child scope with ng-if----->
<div ng-if="true condition here">
<!---select statement from above----->
<select ng-model="$parent.selectedAsset">...</select>
</div>
</div>
我必須用比故意結合父作用域其它這種情況下任何其他的選擇嗎?如果我有多個子範圍(嵌套ng-if
語句),是否需要更改ng-model
以綁定到$parent.$parent.$parent....selectedAsset
以更新我的控制器作用域中的值?在這個主題上是否有任何「最佳實踐」?
乾淨。和功能。我以前見過這個解決方案,但不知道它的使用優勢。非常感謝。 – miniscem 2015-04-02 14:47:14