将父范围值传递给Angular中的ng-repeat循环
这应该是一个非常简单的问题,但我发现的所有解决方法都很复杂。 我正在循环使用模板中的ng-repeat对象数组,如下所示:
<div class="row-fluid" ng-repeat="message in messages.current|filter:'draft'"> {{ message.subject }} ... {{ campaign.name }} ... </div>
由于ng-repeat创build一个新的范围,控制器中的“活动”对象似乎不可访问。 有没有什么办法(除了添加广告系列对象到我的数组中的每个项目)获取该值?
提前致谢。
您可以使用$ parent访问父范围
<div class="row-fluid" ng-repeat="message in messages.current|filter:'draft'"> {{ message.subject }} ... {{ $parent.campaign.name }} ... </div>
另一种方法可能是将父范围作为范围variables传递给指令即
<my-directive md-parent-scope="this" ng-repeat="item in items"></my-directive>
这有点乱,但是你对父母实际上有更多的控制,并且可以传递任何东西。
这是一个不使用$parent
。 它通过嵌套的范围向上search,find你正在使用的对象,但是它必须经过许多范围。
在包含列表的范围中,可以将列表定义为一个属性,如下所示:
$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
的track by $index
,因为我有一个ng-model
的input绑定到数组中的项目,每当模型更新,input将模糊,因为我认为HTML被重新呈现。 使用track by $index
是数组中具有相同值的项目将被重复。 如果你修改第一个以外的其中一个,会发生奇怪的事情。 也许你可以过滤唯一性,以避免这一点。
我对AngularJS相对来说比较陌生,所以请评论是否有什么大的我错过了。 但是这个工作,所以我至less使用它。