如何按对象的子级别过滤angular js中的列表
How to filter a list in angular js by sublevels of object
我从服务器收到了一个类似这样的对象列表
[
{id: 'a', checked :true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
]
现在我想在"var"的基础上过滤这个列表。我正在做类似的事情:
<div ng-controller="repeatCtrl">
<div ng:repeat="o in list | filter: {test.sub.var : myPrecious.id}">
{{o.id}}:
<input type="checkbox" ng:model="o.checked" />
{{o.checked}}
</div>
</div>
我的控制器代码是这样的
var myApp = angular.module('myApp',[]);
myApp.controller('repeatCtrl', function($scope) {
$scope.list = [
{id: 'a', checked :true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
];
$scope.myPrecious = 2;
});
怎么了?
试试这个 solution. You can just specify {$ : myPrecious.id}
at filter
without worrying about hierarchy level, as said at docs.angularjs.org:可以使用 特殊 属性 名称(默认为 $)(例如 {$: "text"})来接受匹配对象的任何 属性 或其 嵌套 对象属性 :
HTML:
<div ng-repeat="o in list | filter : {$ : myPrecious.id}">
{{o.id}}
<input type="checkbox" ng-model="o.checked" />
{{o.checked}}
</div>
Javascript:
$scope.list = [
{id: 'a', checked:true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
];
$scope.myPrecious = {id:2};
我从服务器收到了一个类似这样的对象列表
[
{id: 'a', checked :true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
]
现在我想在"var"的基础上过滤这个列表。我正在做类似的事情:
<div ng-controller="repeatCtrl">
<div ng:repeat="o in list | filter: {test.sub.var : myPrecious.id}">
{{o.id}}:
<input type="checkbox" ng:model="o.checked" />
{{o.checked}}
</div>
</div>
我的控制器代码是这样的
var myApp = angular.module('myApp',[]);
myApp.controller('repeatCtrl', function($scope) {
$scope.list = [
{id: 'a', checked :true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
];
$scope.myPrecious = 2;
});
怎么了?
试试这个 solution. You can just specify {$ : myPrecious.id}
at filter
without worrying about hierarchy level, as said at docs.angularjs.org:可以使用 特殊 属性 名称(默认为 $)(例如 {$: "text"})来接受匹配对象的任何 属性 或其 嵌套 对象属性 :
HTML:
<div ng-repeat="o in list | filter : {$ : myPrecious.id}">
{{o.id}}
<input type="checkbox" ng-model="o.checked" />
{{o.checked}}
</div>
Javascript:
$scope.list = [
{id: 'a', checked:true,test:{sub:{var:4}}},
{id: 'b', checked:true,test:{sub:{var:3}}},
{id: 'c', checked:true,test:{sub:{var:2}}},
{id: 'd', checked:true,test:{sub:{var:2}}},
{id: 'e', checked:true,test:{sub:{var:3}}}
];
$scope.myPrecious = {id:2};