目前我的控制器中有这个:
$scope.showPostsByTags = function (tag) {
$scope.selectedTag = tag
};
在我看来,我在ng-repeat中有这个:
ng-repeat="post in postsData| filter: selectedTag"
“selectedTag”属性仅包含一个字符串。我从一个带有链接的菜单中获取我的标签:
ng-click="showPostsByTags(tag)"
哪个好!
我正在努力推出多个标签,我希望不仅可以通过一个字符串显示帖子,还可以通过多个字符显示帖子。
例如,我的scope属性将包含在数组中推送的许多值, $ scope.selectedTag 将返回'world', 'sports', 'strike'
。
不幸的是,我无法通过数组/对象
我想我需要一些东西来取代我现在的"filter: selectedTag"
,但我无法理解。我找到了解决方案like this,但它们解决了不同的问题。你能给我一些指导吗?非常感谢!
答案 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>
这将仅选择标签中出现的字符串。在我离开你的时候挂钩。