这是不使用$parent
一个可行的方式访问父范围。它通过嵌套的范围向上搜索以找到您正在使用的对象,但是它必须经过许多范围。
在包含列表的范围,你可以用列表定义对象的属性,像这样:
$scope.obj = {};
$scope.obj.items = ['item1','item2','item3'];
然后让ng-repeat
这个样子的:
<div ng-repeat="item in obj.items | filter:'item3' track by $index">
{{obj.items[ obj.items.indexOf(item) ]}}
</div>
(您需要使用obj.items[ obj.items.indexOf(item) ]
而不是obj.items[ $index ]
,因为$index
是已过滤数组的索引,而不是原始数据)
这个工作的原因是因为虽然obj
不会在目前的范围存在,因为你试图访问其属性,角看起来目前的范围之上,而不是给你一个错误(如果你只是试图{{obj}}
这将是不确定的,而Angular会乐意给你任何东西,而不是通过更高的范围来观察)。这是关于嵌套作用域一个有用的链接:http://www.angularjshub.com/examples/basics/nestedcontrollers/
在我来说,我需要的track by $index
,因为我有一个输入与ng-model
数组中绑定到一个项目,并随时根据模型更新,输入将变得模糊,因为我觉得HTML正在被重新渲染。使用track by $index
的后果是数组中具有相同值的项目将被重复。如果你修改第一个以外的其中一个,奇怪的事情将会发生。也许你可以过滤唯一性,以避免这种情况。
我是比较新的AngularJS,所以请评论,如果有什么大的我失踪。但是这个工作,所以我至少使用它。
它应该工作。是{{campaign.name}}在ng-repeat之外工作吗? – Anoop
是NG-重复创建prototypically儿童范围从父范围继承,所以在父范围中定义的所有属性应该是在NG-重复子作用域可见。你有另一个指令定义在div或里面吗? –
好的。我知道了。感谢你们的评论。 –