我正在写一些有点像电子商店的应用程序。我有一个实体和复选框列表来过滤它们。我想让复选框过滤器成为一种通用的过滤器。我计划在checkbox的属性中写一个表达式,然后在ngRepeat中使用过滤器过滤器在每个实体的范围内进行eval。问题是如何从该过滤功能访问实体的范围。例如:
我的数据(JS):
food = [
{
category: 'fruits',
name: 'Apple'
},
{
category: 'vegetables',
name: 'Potato'
}
]
我的过滤器复选框(HTML):
<label>
Fruits:
<input type="checkbox" data-filter="category == 'fruits'" />
<label/>
我的列表(HTML):
<ul>
<li ng-repeat="item in food | filter:customFilterFunction">
</li>
</ul>
我的过滤器功能(JS):
$scope.customFilterFunction = function(item) {
// here I want to eval that expression written in checkbox's attribute
// within the scope of each item in food array.
// The problem is not how to access that expression,
// but how to access the scope of item in food array.
}
当然,每次应用该过滤器函数时,我都可以从$ rootScope创建新的作用域,然后将所有项属性传递给该新作用域,然后在该作用域中对该表达式进行评估。但我认为它会消耗大量内存,因为每次用户更改过滤器时都会创建大量新的范围。
您知道更好的解决方案吗?
答案 0 :(得分:0)
如果没有自定义过滤器,会有什么关注?
Fruits & Apple:
<input type="checkbox" data-ng-model="fil" data-ng-true-value="{{category = 'fruits';name = 'Apple'}}" data-ng-false-value="" />
Fruits:
<input type="checkbox" data-ng-model="fil.category" data-ng-true-value="fruits" data-ng-false-value="" />
Vegetables:
<input type="checkbox" data-ng-model="fil.category" data-ng-true-value="vegetables" data-ng-false-value="" />
<ul>
<li ng-repeat="item in food | filter:fil">{{ item.name }}</li>
</ul>
查看实际操作: plnkr