如何在使用OR作为条件过滤多个列时使用$ filter('filter')?

问题描述:

我在AngularJs应用程序中有一组客户

var customers = [ 
    { 
     "Name": "Alfreds Futterkiste", 
     "City": "Berlin", 
     "Country": "Germany" 
    }, 
    { 
     "Name": "Ana Trujillo Emparedados y helados", 
     "City": "México D.F.", 
     "Country": "Mexico" 
    } 
]; 

我的问题是如何使用多列过滤。我尝试了下面的代码,它不起作用。

编辑

如何上面的语法转换为'或'请检查Sample为参考。

+0

取决于您的搜索条件。 *“不起作用”*不是很有用的信息 – charlietfl

+0

你确定它不工作吗?我已经测试过,它的工作原理。请注意,该语法使用“和”进行过滤,这意味着条件可能类似于“将名称包含此文本的对象和包含相同文本的城市”。是“OR”你需要什么? –

+0

@AlvaroVazquez是啊“或”是我需要对不起,如果我迷茫你们 –

既然你没有使用自定义的角度滤波器通常我只是用Array.prototype.filter()虽然你也可以使用一个函数的参数与$filter

以下假定部分匹配

$scope.customers = customers.filter(item){ 
    var term = $scope.criteria.searchtext.toLowerCase(); 
    //partial match 
    return item.Name.toLowerCase().indexOf(term) >-1 
      || item.City.toLowerCase().indexOf(term) >-1; 

}); 

这可以迅速变成一个角度自定义过滤器也用于视图

我创建了一个新的自定义过滤器过滤多列使用OR条件进行检查,

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

 
function MyCtrl($scope,myFilterFilter) { 
 
\t $scope.criteria = {}; 
 
    $scope.criteria.searchtext = 'Berlin'; 
 
\t \t var customers =[{"Name":"Alfreds Futterkiste","City":"Berlin","Country":"Germany"}, 
 
{"Name":"Ana Trujillo Emparedados y helados","City":"México D.F.","Country":"Mexico"},{"Name":"Futterkiste","City":"Berlin","Country":"Germany asfdasdas"}] 
 
$scope.customers=myFilterFilter(customers,$scope.criteria.searchtext,$scope.criteria.searchtext); 
 
    
 
} 
 

 

 
angular.module('myApp').filter('myFilter', function() { 
 
    return function(customers,name,city) { 
 
     var yes = []; 
 
     angular.forEach(customers, function(value, key) { 
 
     if ((value['Name'] === name) || (value['City'] === city)) { 
 
      yes.push(value);    
 
     } 
 
     
 
    }); 
 
    console.log(yes) 
 
    return yes 
 
    } 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js"></script> 
 
<div ng-controller="MyCtrl" ng-app="myApp"> 
 
    Hello, {{customers}}! 
 
</div>

Here is the fiddle

+0

谁降低了它? – Sravan

+0

请在downvoting之前查看答案或提出理由。 – Sravan

+0

Downvoter等待回复。 – Sravan

添加过滤器在客户

<tr class="animate" ng-repeat="customer in customers | filter: criteria.searchtext"> 
<td ng-bind="customer.Name"></td> 
<td ng-bind="customer.City"></td> 
<td ng-bind="customer.Country"></td> 
</tr> 

再往前客户到$scope如下

$scope.customers = [{}]; // Will be array of customers 

入住这Solution

让我们知道这对你的作品或没有。

+0

看看我如何添加一个'filter:criteria.searchtext'这是你将通过搜索,它会过滤你的记录。试试看,让我们知道。我已经自己测试过并且工作过。 – Samundra