Search code examples
javascriptangularjsangularjs-ng-repeatangular-filters

Angular filter for specific properties in an array


I have an angular filter by input text. for the given list

initialViewModel.users = [
{user: 'Nithin',phone: 'Azus', price: 13000}, 
{user: 'Saritha',phone: 'MotoG1',price: 12000}, 
{user: 'Renjith',phone: 'MotoG2',price: 14000}, 
{user: 'Felix',phone: 'Nexus',price: 21000}];

It is returning incorrect results for the filter texts a,g,m,n,o,s,u,z.

Sample fiddle here.

        <ul>
            <li ng-repeat="user in Model.users | filter: Model.name | orderBy:'price'">{{user.user + ' bought phone worth ' + user.price}}</li>
        </ul>

Say for example, if I filter it with 'a' it should return only the one record having name saritha. Instead it returns two records.


Solution

  • By default angular filters by any property of an object. If you want to filter by specific property you need to update your filter:

    <li ng-repeat="user in Model.users | filter: { user: Model.name } | orderBy:'price'">
        {{user.user + ' bought phone worth ' + user.price}}
    </li>
    

    Pay attention to this part: filter: { user: Model.name }. In this case you are telling angular to filter only property user of your object.

    Here is an updated JSFiddle