Search code examples
angularjsangularjs-ng-repeatangularjs-orderby

Position in an Angular.js collection


I have this collection/array of objects

$scope.users = [
    {name:'Maria', score:90},
    {name:'Bob', score:10},
    {name:'Claire', score:17},
];
$scope.currentUser = 'Bob';

I list them using ng-repeat and an orderBy

li.list-group-item(ng-repeat="user in users | orderBy:'score':true")

How can I show a message saying: "Welcome Bob, today you are #3". Where "1,2,3..." is his position in that ordered collection based on "score"


Solution

  • You can find current user by using $filter

    JavaScript

    app.controller('UsersCtrl', ['$scope', '$filter', function ($scope, $filter) {
        $scope.users = [
            {name: 'Maria', score: 90},
            {name: 'Bob', score: 10},
            {name: 'Claire', score: 17},
        ];
    
        user = $filter('filter')($scope.users, {name: 'Bob'})[0];
        // or
        // user = $filter('filter')($scope.users, name: $scope.currentUser)[0];
    
        $scope.position = $scope.users.indexOf(user) + 1;
    }]);
    

    Template

    <p>Welcome {{ currentUser }}, today you are #{{ position }}</p>
    

    Should work.