在ng-repeat中使用深度对象的Angular过滤器

25 浏览
0 Comments

在ng-repeat中使用深度对象的Angular过滤器

我正在遵循这个问题来通过字段过滤ng-repeat

ng-repeat :filter by single field

然而我的情况不同,它实际上是主对象中对象值的一个字段。基本上我只想显示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

List 1

 

{{ item.name }}

 

List 2

 

{{ item.name }}

 

http://plnkr.co/edit/nh4GryqZJbEiXSzMzTKk

有没有办法做到这一点或者有没有更好的方法?

更新1

我尝试了angular.filter filterBy,它也没有起作用。给我空数组。

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

{{ item.name }}

 

更新2

我尝试了下面这个

{{ item.name }}

 

它似乎起作用了,但我需要精确匹配,不是子字符串匹配。我读过这个但是没有找到在视图中添加true的方法AngularJS Filter Exact Match

有什么线索吗?

更新3(答案正确):

这个有效http://plnkr.co/edit/qJl6MtY6fOlVtD9Rv999?p=preview

基本上我在控制器中添加了这个

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

并在filteredItems上做ng-repeat。我没有看到在视图中直接传递true参数的方法。

admin 更改状态以发布 2023年5月22日
0
0 Comments

如果你正在使用\可以升级到angular 1.3,那么你可以使用1.3 filters,这些过滤器更快速。特别是,你可以使用filterBy

参见: plunkr example

{{ item.name }}

否则,使用自定义函数。请查看我的答案: custom function

0
0 Comments

如果你想访问内部属性,你需要使用对象符号来访问:

{{ item.name }}

查看这个plunker

0