简体   繁体   English

如何在AngularJS中过滤嵌套的JSON数据

[英]How do I filter through nested JSON data in AngularJS

I need to filter through a nested JSON array in AngularJS. 我需要通过AngularJS中的嵌套JSON数组进行过滤。 The JSON structure looks like this: JSON结构如下所示:

articles_data: [{
    title: 'Bigfoot Afoot',
    tags: ['True stories', 'forests'],
    description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.",
    category: 'Bigfoot'
  },
  {
    title: 'Lockness Sighted!',
    tags: ['Sightings', 'Lakes'],
    description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.",
    category: 'Nessy'
  },
  {
    title: 'Jacktalopes Everywhere',
    tags: ['Rabbits', 'cities'],
    description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.",
    category: 'Jacktalope'
  }
]

I am looping through with an ng-repeat : 我正在遍历ng-repeat

<div class="col-md-7 articles">
  <section>
    <div class="card filter" ng-repeat="article in articles.articlemanager.articles track by $index">
      <div class="card-header">
        {{article.title}} &nbsp;<small>{{article.tags.join()}}</small>
        <span class="badge badge-{{article.category}} float-right">{{article.category}}</span>
      </div>
      <div class="card-body">
        <p>
          {{article.description}}
        </p>
      </div>
    </div>
  </section>
</div>

This displays my articles but I need to go a step further and filter them by name or by tag: 这显示了我的文章,但我需要更进一步,并按名称或标签过滤它们:

<form>
  <div class="form-group">
    <label for="filterName">Filter by name</label>
    <input type="text" class="form-control" id="filterName">
  </div>
  <div class="form-group">
    <label for="filterTags">Filter by tags</label>
    <input type="text" class="form-control" id="filterTags">
  </div>
</form>

I don't really know how to use filters in AngularJS but I'm on a time crunch and could use the help. 我真的不知道如何在AngularJS中使用过滤器,但是我很忙,可以使用帮助。 Thanks in advance. 提前致谢。

Just use the | filter 只需使用| filter | filter after your ng-repeat and save it to a ng-model which is added to the <input> . ng-repeat之后| filter ,并将其保存到添加到<input>ng-model中。 You can add more filter s by just piping more with | 您可以通过|来传递更多的filter . You can learn more about filters here . 您可以在此处了解有关过滤器的更多信息。

 var app = angular.module("DummyApp", []); var DummyController = function($scope) { $scope.articles_data = [{ title: 'Bigfoot Afoot', tags: ['True stories', 'forests'], description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.", category: 'Bigfoot' }, { title: 'Lockness Sighted!', tags: ['Sightings', 'Lakes'], description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.", category: 'Nessy' }, { title: 'Jacktalopes Everywhere', tags: ['Rabbits', 'cities'], description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus dapibus mi at nulla finibus pretium. Curabitur auctor lacus vitae varius viverra. Sed pharetra varius sapien, id hendrerit ipsum lacinia placerat. Morbi vitae neque ipsum. Curabitur sem neque, iaculis vel nisl a, condimentum commodo arcu. Morbi nec urna efficitur, tempor nisl a, aliquet felis. Ut non est massa. Proin eget purus est. Integer eu nisi sed nisi maximus sodales. Duis finibus turpis a velit consectetur, luctus eleifend metus scelerisque. Pellentesque suscipit iaculis purus vel convallis.", category: 'Jacktalope' } ] } app.controller("DummyController", ["$scope", DummyController]); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="DummyApp"> <div ng-controller="DummyController"> <form> <div class="form-group"> <label for="filterName">Filter by name</label> <input type="text" class="form-control" id="filterName" ng-model="filterName"> </div> <div class="form-group"> <label for="filterTags">Filter by tags</label> <input type="text" class="form-control" id="filterTags" ng-model="filterTag"> </div> </form> <div class="col-md-7 articles"> <section> <div class="card filter" ng-repeat="article in articles_data | filter:filterName | filter:filterTag"> <div class="card-header"> {{article.title}} &nbsp;<small>{{article.tags.join()}}</small> <span class="badge badge-{{article.category}} float-right">{{article.category}}</span> </div> <div class="card-body"> <p> {{article.description}} </p> </div> </div> </section> </div> </div> </div> 

Depending what you actually want but the easiest way when using ng-repeat is the filter function. 取决于您的实际需求,但使用ng-repeat时最简单的方法是过滤器功能。

<li ng-repeat="x in names | orderBy:'FirstName'">

Here is the link to the documentation there are many options you can use. 这是文档的链接,您可以使用许多选项。 AngularJS Documentation filter function AngularJS文档过滤器功能

<div class="card filter" ng-repeat="article in articles.articlemanager.articles | filter : filterName | filter: filterTags track by $index">

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

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