AngularJS 控制器中的 $filter 具有或条件相同的属性

AngularJS $filter in controller with or condition for same attribute

控制器:

var myApp = angular.module('myApp', []);

myApp.controller('myCtrl', ['$scope', '$filter', function($scope, $filter){

    $scope.tickets = [
                      {title : 'ticket1', assignee : {id:'pratap', name: 'PRATAP'}},
                      {title : 'ticket2', assignee : null},
                      {title : 'ticket3', assignee : {id:'ak', name: 'AK'}}
                      ];    

    $scope.defaultOption = 1;
    $scope.options = [
                      {id:1, name : 'MY TICKETS'},
                      {id:2, name : 'OTHERS TICKET'}
                      ];

    $scope.filteredTicket = [];

    $scope.filterData = function(criteria) {
        if (criteria == 1) {
            $scope.filteredTicket = $filter('filter')($scope.tickets, {assignee: {id:'pratap'}});
        } else {
            $scope.filteredTicket = $filter('filter')($scope.tickets, {assignee: null, assignee: {id:'ak'}});
            console.log($scope.filteredTicket);
        }


    };

    $scope.filterData($scope.defaultOption);

}]);

HTML:

<div ng-controller="myCtrl">
<div>Current User: pratap</div>
<div>
    FILTER: <select ng-model="defaultOption" ng-change="filterData(defaultOption)" ng-options="option.id as option.name for option in options"></select>
</div>
    <div>
        <h1>Tickets</h1>
        <ul>
            <li ng-repeat="ticket in filteredTicket">{{ticket.title}}</li>
        </ul>
    </div>  
</div>  

我想知道是否可以在 $filter 中使用相同的对象属性来形成或调节条件,如下所示

$scope.filteredTicket = $filter('filter')($scope.tickets, {assignee: null, assignee: {id:'ak'}});

这样我就得到了具有 assignee:null 和受让人:'ak' 的对象。如果我 select OTHERS TICKETS 我需要显示 ticket2 和 ticket3,但截至目前我只得到 ticket3。

有人可以帮忙吗??

Created-Plunker-Here

Array.prototype.filter方法手动过滤即可,灵活度更高:

$scope.filterData = function(criteria) {
  if (criteria == 1) {
    $scope.filteredTicket = $scope.tickets.filter(function(ticket) {
      return ticket.assignee === null || ticket.assignee.id == 'pratap';
    });
  } 
  else {
    $scope.filteredTicket = $scope.tickets.filter(function(ticket) {
      return ticket.assignee === null || ticket.assignee.id == 'ak';
    });
    console.log($scope.filteredTicket);
  }
};

演示: https://plnkr.co/edit/MyYfkKzYdJmdAeFHYEvw?p=preview

您可以在过滤器的表达式中添加一个函数:

$scope.filteredTicket = $filter('filter')($scope.tickets, function(value){
        return value.assignee === null || value.assignee.id === 'ak';
});

Plunkr

看看这个

var rateSelected = $filter('filter')($scope.GradeList, function (obj) {
                        if(obj.GradeId == $scope.contractor_emp.save_modal_data.GradeId)
                        return obj;
                });