【发布时间】:2017-09-29 14:20:37
【问题描述】:
我有一个包含多个过滤器的 ng-repeat 列表,但由于我需要将元素隐藏而不是从 DOM 中删除,我使用 ng-show 进行过滤。
这是我的第一个过滤器的样子:
<a href="" ng-click="myFilter = ''; toggle = toggle=0; togglesec=0; mySecondFilter = {}" ng-class="{'active' : toggle==0}" >
Tot
</a>
<a href="" ng-click="myFilter = 'pa'; toggle = toggle=1; togglesec=0; mySecondFilter = {}" ng-class="{'active' : toggle==1}">
Pa
</a>
<a href="" ng-click="myFilter = 'Reposteria'; toggle = toggle=2; togglesec=0; mySecondFilter = {}" ng-class="{'active' : toggle==2}">
Reposteria
</a>
第二个:
<div ng-init="togglesec=0; mySecondFilter = {}">
<a ng-click="mySecondFilter = {}; togglesec = togglesec=0" ng-class="{'active' : togglesec==0}">
All
</a>
<a ng-click="mySecondFilter = {'vegan': true}; togglesec = togglesec=1" ng-class="{'active' : togglesec==1}">
Vegan
</a>
<a ng-click="mySecondFilter = {'gluten': true}; togglesec = togglesec=2" ng-class="{'active' : togglesec==2}">
Gluten Free
</a>
</div>
现在,我可以使用 ng-show 和第一个过滤器过滤 ng-repeat,如下所示:
<div ng-repeat="pa in products" ng-show="pa.tipus.indexOf(myFilter) != -1">
基本上,它会将 myFilter 的值与 pa.tipus 对象属性进行比较,并且可以正常工作。
但它不适用于第二个过滤器,因为 mySecondFilter 是一个对象,而不是一个字符串(它需要过滤包含 vegan:true 或 gluten:true 的结果强>)
这是我的对象类型的示例:
pa {
tipus : 'pa',
gluten : false,
vegan : true
}
关于如何在同一个 ng-show 中组合两个过滤器的任何提示?
编辑
我已应用 Naren 的答案,但点击任何过滤器时出现以下错误:
angular.min.js:122 TypeError: Cannot create property 'vegan' on string ''.
我也尝试通过添加这个来初始化 myFilter,但没有运气,出现同样的错误:
$scope.myFilter = {
tipus : '',
vegan : '',
gluten : '',
lactosa : ''
};
【问题讨论】:
标签: javascript angularjs angular-filters