如何根据多个值和特定字符串过滤ng-repeat

时间:2017-03-26 18:29:53

标签: angularjs angularjs-ng-repeat angularjs-filter

我是angularJS的新手,我有这个数据

 {
"name": "test product",
"slug": "test-product",
"tags": "tag 1, tag 2, tag 3",
"price": "80.00"
}

如何使用基于“标记”的ng-repeat和过滤器以及针对特定字符串的多个值?我试过像

这样的东西

  $scope.filterTags = function (item) {
      return item.tags == 'tag 1' || item.tags == 'tag 2';
    };
<div data-ng-repeat="product in products | filter: filterTags">
      <div>{{ product.name }}</div>
    </div>

我确实获得了具有该特定标记的产品,但仅当该值以该特定字符串开头时才会生效。假设标签值为“tag 3,tag 2”的产品未被选中,但“tag 2,tag 3”的产品不会被选中。我想要选择里面带有“标签2”的所有产品,我该怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您需要custom filter

HTML:

<div data-ng-repeat="product in products | filter: filterTags">
      <div>{{ product.name }}</div>
    </div>

JS:

在控制器中:

arrFilterTag= ['tag1','tag2'];
    .filter('filterTags', function () {

        return function (products, arrFilterTag) {
            products.filter(function (val) {
                return arrFilterTag.indexOf(val.slug) > -1; 
//arrFilterTag['tag1','tag2']
            });

            return products;
        }
    })

答案 1 :(得分:0)

tags属性应该是一个Array。如果您无法更改它,可以通过,分隔符拆分它们,然后使用该数组过滤它应该类似于:

data-ng-repeat="product in products | filter: {tagsArray:'tag 2'}"

(不确定确切的语法)