如何从过滤器过滤器访问ngRepeat迭代器范围

时间:2014-03-31 12:55:16

标签: angularjs angularjs-ng-repeat

我正在写一些有点像电子商店的应用程序。我有一个实体和复选框列表来过滤它们。我想让复选框过滤器成为一种通用的过滤器。我计划在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创建新的作用域,然后将所有项属性传递给该新作用域,然后在该作用域中对该表达式进行评估。但我认为它会消耗大量内存,因为每次用户更改过滤器时都会创建大量新的范围。

您知道更好的解决方案吗?

1 个答案:

答案 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