Davor
Davor

Reputation: 400

Filter json data in controller, the right way

(there are other questions but neither helped me out)

Hi, I would like to know if this is the right way to filter the results I get from service where I'm displaying only one result (like a detail).

I know I could use ng-repeat and filter it in the view and that is the cleanest, but I want to have more control over because I will re-use some of the data in the controller for other operations.

Right now I'm doing this:

$scope.savedEvents = Event.getPayedEvents(); //gets a list from service

//Goes through entire list and checks for a match   
angular.forEach($scope.savedEvents, function(event) {
    if (event.IdEvent == $stateParams.eventId) {
        $scope.showEvent = event;
    }
});
//now if there is a match I can use $scope.showEvent.eventName etc

Not sure if this would be easier using $filter to return just one event that has correct IdEvent. Or if someone has better solution, please let me know.

thanks

Upvotes: 1

Views: 3845

Answers (1)

Ezekiel Victor
Ezekiel Victor

Reputation: 3876

I don't see any problems with what you have, but you could inject the $filter service and do this one liner:

$scope.showEvent = $filter('filter')($scope.savedEvents, { IdEvent: $stateParams.eventId });

EDIT: Here is an easy way to resolve the result to a single value from the returned array:

var showEvents = $filter('filter')($scope.savedEvents, { IdEvent: $stateParams.eventId });
$scope.showEvent = showEvents && showEvents.length ? showEvents[0] : null;

In CoffeeScript it is a little more concise:

$scope.showEvent = $filter('filter')($scope.savedEvents, { IdEvent: $stateParams.eventId })?[0]

Upvotes: 1

Related Questions