Как фильтровать JSON-данные с помощью AngularJs?
У меня есть массив (_users), содержащий объекты JSON.
{
"User":
{
"userid":"19571",
"status":"7",
"active":"1",
"lastlogin":"1339759025307",
"Stats":
[
{
"active":"1",
"catid":"10918",
"typeid":"71",
"Credits":
[
{
"content":"917,65",
"active":"1",
"type":"C7"
},
{
"content":"125,65",
"active":"1",
"type":"B2"
}
]
}
]
}
}
1- Как я могу фильтровать только пользователей с "активными": "1", а не "0"
Я пробовал что-то вроде этого:
<div ng-repeat="user in _users | filter:active | orderBy:user.userid">
{{user.userid}}
</div>
но не работает правильно для меня.
Спасибо!
Ответы
Ответ 1
Так как ваша объектная модель является сложной, я бы рекомендовал использовать пользовательскую функцию фильтрации:
$scope.isActive = function(user) {
return user.User.Stats[0].active === "1";
};
а затем в вашем HTML:
<div ng-repeat="user in _users | filter:isActive">
{{user.User.userid}}
</div>
Вот рабочий jsFiddle: http://jsfiddle.net/pkozlowski_opensource/4kzzy/3/
Обязательно проверьте документацию angular на фильтрах, если вам нужна дополнительная информация: http://docs.angularjs.org/api/ng.filter:filter
Ответ 2
Принимая @pkozlowski.opensource немного дальше и позволяя прямую фильтрацию элементов/пользователей:
http://jsfiddle.net/hbyNN/
<div ng-controller="MyCtrl">
<label>userid substring filter:</label>
<input ng-model="zzzzz">
<div ng-repeat="user in _users | filter:isInteresting">
<pre>{{user | json}}</pre>
</div>
</div>
и
$scope.isInteresting = function (user) {
if ($scope.zzzzz == undefined) {
return true;
}
return user.userid.indexOf($scope.zzzzz) !== -1;
};