如何通过angularjs中的数组过滤对象

时间:2014-08-18 16:06:04

标签: javascript angularjs angularjs-ng-repeat

只是想知道你是否可以使用另一个过滤器数组过滤现有数组。

所以说我们原来的json是:

[

   {
    "bookname": "harryporter",
    "year": "2000",
    "author":"J. K. Rowling"

   }, 

   {
    "bookname": "Sleepless",
    "year": "2003",
    "author":"Connie Ann Michael"

   },

   {
    "bookname": "No man's land",
    "year": "1993"
    "author":"Harold Pinter"

   }

];

过滤器阵列:

[
"year":"1993"
"bookname":"No man"
]

还有一种方法可以在编辑输入时动态地将元素添加到数组中,也许键入文本?

例如:

输入

<div>
<input type="text" ng-model={{ filterArray.insert("bookname":"value") }}>Book Name
</div>

过滤

<div ng-repeat="books in originalJson | filter: filterArray">
{{books.author}}
</div>

我希望我已经足够解释了我的问题,欢呼声

1 个答案:

答案 0 :(得分:1)

如果要按多个值过滤,可以传入过滤器对象 每个键对应一个字段名称,每个值根据相应的键过滤项目。

Book name: <input type="search" ng-model="filterObj.bookname" />
Year:      <input type="search" ng-model="filterObj.year" />
<div ng-repeat="book in books | filter:filterObj">...</div>

另请参阅此 short demo


如果您想让用户动态指定要过滤的字段,您也可以这样做(虽然这不是很常见的做法):

Filter by:
<input type="search" ng-model="dynamicField"
       placeholder="Field to filter by" />
<input type="search" ng-model="filterObj[dynamicField]"
       placeholder="Value to filter by" />
<div ng-repeat="book in books | filter:filterObj">...</div>