如何执行"除了"在Angular中过滤?

时间:2015-10-31 00:41:23

标签: angularjs angularjs-filter

假设我有一个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模块的示例,但我认为在这种情况下,任何自定义过滤器都应限定为此控制器。

1 个答案:

答案 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>