[英]AngularJS ng-repeat over an array with filter
我有一個對象的JS數組。
$scope.users = [{
"name": "alice",
"city": "london",
"wards": [{
"id": 1,
"number": 24
},
{
"id": 2,
"number": 25
},
{
"id": 3,
"number": 26
}
]
},
{
"name": "bob",
"city": "london",
"wards": [{
"id": 1,
"number": 24
},
{
"id": 2,
"number": 25
},
{
"id": 4,
"number": 27
}
]
}
]
我的ng-repeat="user in users | filter: searchUser
有一個ng-repeat="user in users | filter: searchUser
這里searchUser
可以包含姓名 , 城市和病房號 。 現在,對於名稱和城市 ,搜索工作正常,但對於要搜索病房號的對象病房的子陣列卻不能。
有沒有我可以實現的angularJS方法?
否。您需要編寫自己的自定義過濾器。
這是一個示例jsfiddle,已通過輸入搜索進行了測試
愛麗絲,鮑勃,倫敦,26,27
如果要精確匹配,則將-1更改為0
app.filter('myFilter', function(){
return function(users, search){
if(!search) return users;
if(!users || !users.length) return users;
searchInLower = search.toString().toLowerCase();
users = users.filter(function(user){
matches = false;
if(user.name){
usernameInLower = user.name.toString().toLowerCase();
matches = matches || usernameInLower.indexOf(searchInLower) !== -1;
}
if(user.city){
cityInLower = user.city.toString().toLowerCase();
matches = matches || cityInLower.indexOf(searchInLower) !== -1;
}
if(user.wards && user.wards.length && !matches){
for(var i = 0; i < user.wards.length; i++){
ward = user.wards[i];
for(var key in ward){
objectKeyValueInLower = ward[key].toString().toLowerCase();
matches = matches || objectKeyValueInLower.indexOf(searchInLower) !== -1;
}
}
}
return matches
});
return users;
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.