假设我有一个Angular视图,允许用户从库中检查书籍。我的数据模型由两个Book
实体数组组成,每个实体都有一个唯一的ID字段和一个标题字段。第一个数组包含库中每本书的实体,第二个数组包含用户已签出的每本书的实体。
libraryBooks = [{
id: 0,
title: "The Adventure of Tom Sawyer"}, {
id: 1,
title: "Moby Dick" }, {
id: 2,
title: "To Kill a Mockingbird" }, {
id: 3,
title: "The Three Little Pigs" }];
checkedOutBooks = [{
id: 0,
title: "The Adventure of Tom Sawyer"}, {
id: 3,
title: "The Three Little Pigs" }];
简而言之,图书馆有四本书,用户已经签了两本。如果我想列出两个数组中的书籍,我可以这样写:
<h1>Library Books</h1>
<div ng-repeat="book in libraryBooks">
{{ book.title }}
</div>
<h1>Checked out Books</h1>
<div ng-repeat="book in checkedOutBooks">
{{ book.title }}
</div>
假设我想显示第三个列表:用户尚未签出的图书馆图书的子集。
我见过Angular&#34;过滤器&#34;用于指定一个不应匹配的特定值,以缩小列表范围,但在这种情况下,我想排除多个值,那么我该如何去做呢?
我见过将自定义过滤器添加到Angular模块的示例,但我认为在这种情况下,任何自定义过滤器都应限定为此控制器。
答案 0 :(得分:1)
我已经明白了这一点。解决方案是编写一个过滤函数并将其附加到$ scope,如下所示:
function filter_notCheckedOut(book) {
var i;
for (i = 0; i < that.libraryBooks.length; i += 1) {
if (that.libraryBooks[i].id === page.id) {
return false;
}
}
return true;
}
在视图中,它可以像这样引用:
<h1>Books not checked out</h1>
<div ng-repeat="book in libraryBooks | filter:filter_notCheckedOut">
{{ book.title }}
</div>