繁体   English   中英

ng-repeat中的角度过滤器与深对象

[英]Angular filter in ng-repeat with deep object

我正在按照这个问题过滤一个字段的ng-repeat

ng-repeat:按单个字段过滤

但是我的情况不同,它实际上是主对象的对象值中的一个字段。 基本上我只想显示data.a == 1

以下代码适用于第一个列表。 第二个列表给我错误:

angular.module('myapp', [])
.controller('mainCtrl', function ($scope) {
    $scope.items = [{
        name: "John",
        data: {
            a: 1
        }
    }, {
        name: "Lee",
        data: {
            a: 2
        }
    }, {
        name: "Rue",
        data: {
            a: 3
        }
    }, {
        name: "Peter",
        data: {
            a: 1
        }
    }];
});

HTML

<div ng-controller="mainCtrl">
    <h1>List 1</h1>
    <p ng-repeat="item in items">{{ item.name }}</p>
    <h1>List 2</h1>
    <p ng-repeat="item in items | filter: {data.a :1}">{{ item.name }}</p>
</div>

http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk

有关如何做到这一点的任何帮助还是有更好的方法?

更新1

我尝试了angular.filter filterBy,它也没有用。 给我空白阵列。

http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk?p=preview

    <p ng-repeat="item in items | filterBy: ['item.data.a'] :1">{{ item.name }}</p>

更新2

我试过这个

<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>

它似乎工作,但我需要完全匹配,而不是子串匹配。 我读过这个但似乎没有办法添加true AngularJS过滤精确匹配

任何线索?

更新3(正确的答案):

这工作http://plnkr.co/edit/qJl6MtY6fOlVtD9Rv999?p=preview

基本上我把它添加到控制器

$scope.filteredItems = $filter('filter')($scope.items, {data :{a:1}}, true); 

而是对filteredItems进行ng-repeat 我没有看到直接在视图中传递true参数的方法。

如果要访问内部属性,则需要使用对象表示法访问它:

<p ng-repeat="item in items | filter: {data :{a:1}}">{{ item.name }}</p>

检查这个plunker

如果你正在使用\\可以升级到角度1.3,那么你可以使用它: 1.3过滤器这些更快。 特别是,您可以使用filterBy

请参阅: plunkr示例

<p ng-repeat="item in items | filterBy: ['data.a'] :1">{{ item.name }}</p>

否则,请使用自定义功能。 在这里查看我的答案: 自定义功能

暂无
暂无

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

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