Angularjs过滤范围数据中的多个值

时间:2015-02-02 12:29:58

标签: angularjs angular-filters

目前我的控制器中有这个:

$scope.showPostsByTags = function (tag) {

    $scope.selectedTag = tag

};

在我看来,我在ng-repeat中有这个:

ng-repeat="post in postsData| filter: selectedTag"

“selectedTag”属性仅包含一个字符串。我从一个带有链接的菜单中获取我的标签:

ng-click="showPostsByTags(tag)"

哪个好!

我正在努力推出多个标签,我希望不仅可以通过一个字符串显示帖子,还可以通过多个字符显示帖子。

例如,我的s​​cope属性将包含在数组中推送的许多值, $ scope.selectedTag 将返回'world', 'sports', 'strike'。 不幸的是,我无法通过数组/对象

中的多个值来过滤我的帖子

我想我需要一些东西来取代我现在的"filter: selectedTag",但我无法理解。我找到了解决方案like this,但它们解决了不同的问题。你能给我一些指导吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

我已经为您快速写了一个自定义过滤器:

app.filter('multipleTags', function($filter){
  return function multipleTags (items, predicates) {
    angular.forEach(predicates, function(predicate){
      items = $filter('filter')(items, predicate)
      //if you want to match exact tag you can use exact match filter
      //items = $filter('filter')(items, predicate, true)
    })
    return items;
  }
})

如果你去这个工作插件http://plnkr.co/edit/ZhnuM0WW3GZS5QLxK98t?p=preview,你会看到它在行动

如果你指定像b这样的单个字母,那么它将只选择包含两者的元素,你显然可以使它与整个单词一起使用

答案 1 :(得分:0)

你的意思是这样吗?

http://plnkr.co/edit/6GwqaS7xVLZapeADSRUw?p=preview

app.controller('MainCtrl', function($scope) {
  $scope.tags = ['apple', 'orange'];
  $scope.selectedFilter = function(val) {
    var found = false;
    angular.forEach($scope.tags, function(tag) {
      if (val.indexOf(tag) !== -1) {
        found = true;
      }
    })
    return found;
  }
  $scope.data = [
    'scrambled eggs',
    'green eggs and ham',
    'apples and oranges',
    'apple pie',
    'orange juice',
    'eggs, oranges, apples'
  ];
});

模板:

  <body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>
    <p>selected: {{tags}}</p>
    <p ng-repeat="d in data | filter:selectedFilter">{{d}}</p>
  </body>

这将仅选择标签中出现的字符串。在我离开你的时候挂钩。