AngularJS过滤数组

时间:2017-04-02 09:20:28

标签: angularjs

我正在学习Angular。以下代码基于<select multiple>控件动态显示/隐藏表的行。

代码有效但我想知道是否有办法将data-ng-if中的表达式转换为过滤器表达式而不创建自定义过滤器。还不确定哪种方法是性能更好的方法。

<select id="psgs" data-ng-model="ctrl.showSubGroups"
   ng-options="item.id as item.name group by item.productGroup.name for item in ctrl.productSubGroupList"
   multiple>
</select>

<tr 
   data-ng-if="ctrl.showSubGroups.indexOf(product.productSubGroup.id) > -1" 
   data-ng-repeat="product in ctrl.productList | filter: ??? | orderBy: ctrl.seq">
   ...
</tr>

1 个答案:

答案 0 :(得分:1)

您可以使用自定义过滤器实现这一点,与每次迭代时使用ng-if相比,这是更好的方法。你不应该为那些不会被渲染的循环重复循环。

这是怎么回事。在您的HTML中,使用customFilter(我们创建的自定义过滤器函数),如下所示:

<tr 
   data-ng-repeat="product in ctrl.productList | filter: ctrl.customFilter | orderBy: ctrl.seq">
   ...
</tr>

现在,在你的控制器中,你可以拥有customFilter这样的功能:

ctrl.customFilter = function(product) {
  return ctrl.showSubGroups.indexOf(product.productSubGroup.id) > -1
}

这是一个带样本数据的简单working example