我最近花了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