嘿,我对角度过滤器几乎没有问题。 我从wordpress导入帖子,我真的想用标签过滤它们,比如,现在只显示带有tag = ENG的帖子,或者只显示带有tag = GER的帖子。 这就是我的html的样子
<div ng-controller="ThreeMainPosts">
<div ng-repeat="threePost in threePosts | filter : {data.data.posts[0].tags[0].slug = 'ENG'} ">
<div three-post="threePost">
<h1>CONTENT</h1></div>
</div>
</div>
控制器
myModule.controller('ThreeMainPosts', function($scope, $location, WordPressNewsService) {
var postsPerPage = 3;
var orderBy = 0;
WordPressNewsService.getPosts(postsPerPage, orderBy).then(function(data) {
$scope.threePosts = data.data.posts;
});
}); 和json
{ id: 312, type: "post", slug: "la-bamba-3", url: "sada2", … }
attachments:[]
author:{ id: 1, slug: "ds", name: "hnews", first_name: "", last_name: "", … }
categories:[{ id: 6, slug: "ludzie", title: "Ludzie", description: "", parent: 0, post_count: 2 }]
tags: [{ id: 32, slug: "en", title: "EN", description: "EN", post_count: 1 }]
url:"http://xxx0.co,/?p=312"
previous_url:"http://hirsch-news.iterative.pl/?p=306"
status:"ok"
我尝试在控制器中创建过滤器,但我只能对单个元素执行此操作,例如:
if(data.data.posts[0].tags[0].slug == "ENG"){
$scope.threePosts = data.data.posts;
}
任何想法的家伙? 祝你好一天! :)
答案 0 :(得分:4)
制作快速过滤器,可以根据您的需要进行更改。希望能帮助到你。 Angular $filter Docs
这里有一个Codepen,其角度为内置$ filter。
myModule
.controller('ThreeMainPosts', function($scope, $location, WordPressNewsService, $filter) {
var postsPerPage = 3;
var orderBy = 0;
var tagToSortBy = 'EN'
WordPressNewsService.getPosts(postsPerPage, orderBy).then(function(data) {
$scope.threePosts = $filter('postFilter')(data.data.posts, tagToSortBy);
});
})
.filter('postFilter', function() {
return function(post, tag) {
if (post.tags.slug === tag) {
return post;
}
};
});
如果你想在模板中这样做,那就像这样。
<div ng-controller="ThreeMainPosts">
<div ng-repeat="post in threePosts | postFilter : 'ENG' ">
<div three-post="threePost">
<h1>CONTENT</h1>
</div>
</div>
</div>
答案 1 :(得分:1)
我认为您希望Array.filter
功能与Array.some
var postsWithTagSlugENG = data.data.posts.filter(function (post) {
return post.tags.some(function (tag) {
return tag.slug == "ENG"
});
});
答案 2 :(得分:1)
这是使用Angular提供的过滤器的另一种方法:
在javascript中:
$filter('filter')(data.data.posts, tagToSortBy);
在HTML中:
<input type="text" name="searchTag" placeholder="Filter by Any Property" ng-model="search.$" />
<input type="text" name="searchTag" placeholder="Filter by Tag" ng-model="search.tag" />
<div ng-repeat="post in threePosts | filter : search ">
这个答案和@alphapilgrim之间的区别在于你不必创建自己的逻辑来处理过滤。 Angular提供了一个基本过滤器,即使不是大多数情况下也可以很好地工作。
如果您想了解有关它的更多信息,请参阅以下文档。如果你深入挖掘它是非常强大的。 https://docs.angularjs.org/api/ng/filter/filter