【问题标题】:angular js filter with array of id's带有id数组的角度js过滤器
【发布时间】:2014-09-08 03:50:53
【问题描述】:

span class="list-group-item" ng-click="filterByCtg = {ctgid:'12'}">类别

div ng-repeat="product in products | filter:search | filter:filterByCtg |orderBy:orderByFilter:reverse">

我想给 filterByCtg 一个 id 数组,它们是子类别和子子类别。 我怎样才能做到这一点?

当我给它一个数组时,过滤器不起作用。

抱歉英语不好。

【问题讨论】:

  • 你能发个小提琴吗?
  • 对不起,它在一个框架上,我不认为我可以或不知道如何处理所有的 php...对不起,我是一个菜鸟,我想更好地解释一下:我有一个列表
    • 等等,这是我的产品目录的“菜单”,li 将类别 ID 传递给过滤器并且过滤器有效。但我想通过过滤器多个 id,所以它会显示子类别。
  • 根据文档,过滤器表达式可以是字符串、对象或函数。它没有说明传递数组。 docs.angularjs.org/api/ng/filter/filter
  • 我可以通过自定义过滤器以某种方式实现这一点吗?

标签: angularjs laravel-4


【解决方案1】:

自定义过滤器正是正确的答案。它的存根看起来像这样:

angular
  .module('myApp', [])
  .filter('myFilter', function () {
    return function(input, query) {
      var result = [];

      // Now do whatever you want to create the 'result' array
      // input will contain the source to the ng-repeat, categories
      // query will contain whatever you gave it as a parameter - see below
      // You should return an array of items. Each item will become 'entry' in the ng-repeat

      return result;
   };
 });

你会这样使用它:

<div class="whatever" ng-repeat="entry in categories | myFilter:someParameter track by $index"></div>

请注意,您可以设置$scope.someParameter = 'A';,它将作为query 传递到您的过滤器中。

另外,请注意,您的过滤器现在就像任何其他 Angular 模块一样。它可以做很多聪明的事情,比如要求注入一个服务,它可以从中获取子类别数据之类的东西。但请注意,这是代码的性能敏感部分。你的过滤器会比你预期的运行得更多,因为很多事情会触发 Angular 来验证这个列表没有改变。因此,您应该尽可能提高效率。

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2017-09-11
    • 2021-04-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多