【问题标题】:Filter nested array in AngularJS在AngularJS中过滤嵌套数组
【发布时间】:2016-07-12 11:03:03
【问题描述】:

我有一个如下所示的 JSON 提要:

[{
    "title":"Post 1",
    "categories":[1]
},{
    "title":"Post 2",
    "categories":[12,123]
},{
    "title":"Post 3",
    "categories":[123]
}]

我希望能够按“类别”和“标题”对其进行过滤,如下所示:

<select ng-model="search.categories">
    <option value="">Categories</option>
    <option value="1">1</option>
    <option value="12">12</option>
    <option value="123">123</option>
</select>

<input ng-model="search.title">

<ul>
    <li ng-repeat="post in posts | filter:search">
        {{post.title}} - {{post.categories}}
    </li>
</ul>

标题搜索工作正常。但是对于类别,搜索“1”会匹配“1”、“12”和“123”(类似地,“12”会匹配“12”和“123”)。有没有办法将搜索结果限制为完全匹配?我假设必须以某种方式拆分“类别”数组,以便每个 ID 单独匹配。


另一个选项:我可以根据嵌套子循环的内容过滤父循环吗?代码如下:

<ul>
    <li ng-repeat="post in posts | filter:search">
        {{post.title}}
        <ul>
            <li ng-repeat="category in post.categories">
                {{category}}
            </li>
        </ul>
    </li>
</ul>

【问题讨论】:

标签: angularjs multidimensional-array filter


【解决方案1】:

您可以在另一个冒号后添加一个比较函数或简单地 true,让 Angular 只接受完全匹配。您也可以通过添加另一个管道来使用多个过滤器。它应该看起来像这样:

<li ng-repeat="post in posts | filter : search.categories : true | filter : search.title">

在此处查看更多信息:https://docs.angularjs.org/api/ng/filter/filter

【讨论】:

  • 精确过滤器不能按原样工作,因为我将单个值与逗号分隔的数组进行比较。如果我要搜索“1”,则“类别”设置为“1,12,123”的帖子将不匹配。
猜你喜欢
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
相关资源
最近更新 更多