使用来自指令Angularjs的数据过滤ng-repeat表

时间:2014-12-15 15:48:09

标签: javascript angularjs angularjs-directive ng-repeat

我有一个对象数组,我在一个ng-repeat循环中使用,其属性通过它的id引用另一个对象。

{Description: 'something', OtherObjectId: 1}...

我使用指令在ng-repeat循环中显示有关OtherObject的信息。

<li ng-repeat="object in objects">
   <div>{{object.Description}}</div>
   <div other-object-info="date" other-object-id="{{object.OtherObjectId}}"></div>
</li>

otherObjectInfo指令使用innerHtml将请求的信息放入该html标记

现在这部分显然不起作用,我需要能够使用所有显示的信息过滤该列表,包括指令插入的信息。

你会如何解决?我想最好的方法是在渲染视图之前在对象数组中包含OtherObject,但我喜欢使用该指令的简单方法,因为我需要在多个视图中使用它。

非常感谢你的输出!

1 个答案:

答案 0 :(得分:1)

考虑ng-repeat的自定义过滤器。您可以将其他对象与数组分开,并将您需要的任何内容传递给自定义过滤器函数:

<li ng-repeat="object in objects | filter:customFunct(otherObjectCollection)">

$scope.customFunct = function(otherCollection) {
    return function(object) {
       // locate the target object within otherCollection using object.OtherObjectId
       // eg you can use this if you're using lodash:
       var targetObj = _.find(otherCollection, {id : object.OtherObjectId});
       // make the comparison you need
       // use 'return' to return true based on the comparison
       return targetObj.value > 40;
    }
}

通过这种方式,您可以定义和使用带有传递参数的自定义过滤器。

您可以在此处阅读有关此解决方案的更多讨论:

https://stackoverflow.com/a/17813797/1220172

https://stackoverflow.com/a/17811582/1220172