繁体   English   中英

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

[英]How to filter json using angular filter

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

有什么想法吗? 祝你好一天! :)

制作快速过滤器,可以根据您的需要进行更改。 希望能帮助到你。 Angular $过滤器文档

这是一个带有角度内置$ code的Codepen

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>

我想你想要Array.filter函数,结合Array.some

var postsWithTagSlugENG = data.data.posts.filter(function (post) {
    return post.tags.some(function (tag) {
        return tag.slug == "ENG"
    });
});

这是使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM