这是一种不使用的有效方式$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
当前范围内不存在,当您尝试访问它的属性时,Angular 会查看当前范围而不是给您一个错误(如果您只是尝试{{obj}}
它将是未定义的,并且 Angular 会很高兴什么都不给你,而不是看更高的范围)。这是一个关于嵌套范围的有用链接:http ://www.angularjshub.com/examples/basics/nestedcontrollers/
在我的情况下,我需要track by $index
,因为我有一个ng-model
绑定到数组中的项目的输入,并且每当模型更新时,输入就会模糊,因为我认为 HTML 正在重新渲染。使用的结果track by $index
是数组中具有相同值的项目将被重复。如果您修改第一个以外的其中之一,就会发生奇怪的事情。也许您可以过滤唯一性以避免这种情况。
我对 AngularJS 比较陌生,所以如果我遗漏了什么大的东西,请发表评论。但这有效,所以我至少在使用它。