Convert Object with Properties to an Array
First convert your object with properties to an array. Arrays are more useful in AngularJS, especially for filtering and sorting:
var users = {
"user":{"success":true},
"user1":{"success":false,"error":"User already exists"},
"user2":{"success":true,"error":"Wrong credentials"},
"user3":{"success":false,"error":"Wrong credentials"}
};
$scope.users = [];
angular.forEach(users, function(item, key) {
$scope.users.push({ name: key, data: item } );
});
Using Filter in View
You can filter in the view by using the '|' operator:
<ul>
<li ng-repeat="user in users | filter:{ data: { success:'true'} }">
{{ user }}
</li>
</ul>
Using Filter in Controller
Alternatively, you can use the $filter service in the controller:
$scope.filtered = $filter('filter')($scope.users, { data: { success:'true' }});
Then in your view:
<ul>
<li ng-repeat="user in filtered ">
{{ user }}
</li>
</ul>
var app = angular.module('app', []);
app.controller('ctrl', function($scope, $filter) {
var users = {
"user": {
"success": true
},
"user1": {
"success": false,
"error": "User already exists"
},
"user2": {
"success": true,
"error": "Wrong credentials"
},
"user3": {
"success": false,
"error": "Wrong credentials"
}
};
$scope.users = [];
angular.forEach(users, function(item, key) {
$scope.users.push({
name: key,
data: item
});
});
$scope.filtered = $filter('filter')($scope.users, {
data: {
success: 'true'
}
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
<h2>Use Filter in View</h2>
<ul>
<li ng-repeat="user in users | filter:{ data: { success:'true'} }">
{{ user }}
</li>
</ul>
<h2> Use Filter in Controller</h2>
<ul>
<li ng-repeat="user in filtered ">
{{ user }}
</li>
</ul>
</div>