如何使用角度过滤器过滤json

时间:2017-04-06 14:52:32

标签: javascript angularjs json wordpress

嘿,我对角度过滤器几乎没有问题。 我从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;
}

任何想法的家伙? 祝你好一天! :)

3 个答案:

答案 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