我正在学习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>
答案 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