Matthew Henshall
Matthew Henshall

Reputation: 31

Angularjs filters OR conditions

I am trying to create a filter where I can conditionally select multiple attributes of the same variable. For example

var list = [ {id: 1, state: 'U'}, {id: 2, state: 'P'} ]

<div ng-repeat="item in list| filter:{state:'U'}>

This would result in id 1 only being displayed.

<div ng-repeat="item in list| filter:{state:'P'}>

This would result in id 2 only being displayed.

How can I create a filter to display all id's that have state:'P' OR state:'A'

Neither of the below work:

<div ng-repeat="item in list| filter:{state:'P' || 'A'}>

<div ng-repeat="item in list| filter:({state:'P'} || {state:'A'})>

Upvotes: 1

Views: 482

Answers (2)

Aravind
Aravind

Reputation: 41543

Why do have so much confusion. Use ng-if just like your normal if statement like this

var list = [ {id: 1, state: 'U'}, {id: 2, state: 'P'},{id: 1, state: 'A'} ]
<div ng-repeat="item in list">
      <div ng-if="item.state == 'A' || item.state== 'P'">
{{item.id}}
</div>
</div>

Implementation is also as below

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
  $scope.list = [{id: 1,state: 'U'}, {id: 2,state: 'P'}, {id: 3,    state: 'A'}];


});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <div ng-repeat="item in list">
    <div ng-if="item.state == 'A' || item.state== 'P'">
      {{item.id}}
    </div>
  </div>
</div>

Upvotes: 0

ngCoder
ngCoder

Reputation: 2105

Hope this below code snippet might help you ! Run it :)

var app = angular.module('app', []);
app.controller('Ctrl', function($scope) {




  $scope.list = [{
    id: 1,
    state: 'U'
  }, {
    id: 2,
    state: 'P'
  }, {
    id: 3,
    state: 'A'
  }];

  $scope.state = function(item) {


    return (item.state == 'P' || item.state == 'A');

  };

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="app" ng-controller="Ctrl">

  <div ng-repeat="item in list | filter:state">

    {{item.id}}

  </div>

</div>

Upvotes: 2

Related Questions