将父范围值传递给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 $indextrack by $index ,因为我有一个ng-model的input绑定到数组中的项目,每当模型更新,input将模糊,因为我认为HTML被重新呈现。 使用track by $index是数组中具有相同值的项目将被重复。 如果你修改第一个以外的其中一个,会发生奇怪的事情。 也许你可以过滤唯一性,以避免这一点。

我对AngularJS相对来说比较陌生,所以请评论是否有什么大的我错过了。 但是这个工作,所以我至less使用它。