[英]Using multiples filters WITHOUT chaining in AngularJS
I have two filters on an ng-repeat like so: 我在ng-repeat上有两个过滤器,如下所示:
<tr ng-repeat="c in datasets | filter:filterDataSet | filter:filterExpressionforPerspective | orderBy:'-id'" id="{{c.data_id}}" animate-on-change='c.program_name + c.organization + c.data_type_fmv_wami + c.perspective + c.status' ng-animate=" 'animate'">
If I only have the first filter, 'filter:filterDataSet' all of my data is properly displayed on the page when I arrived on the page. 如果我只有第一个过滤器,则当我到达页面时,'filter:filterDataSet'的所有数据都会正确显示在页面上。 The following is the code how I am using filter:filterDataSet: 以下是我如何使用filter:filterDataSet的代码:
Filter: <span class="input-icon">
<input placeholder="Filter data set list ..." class="nav-search-input" ng-model="filterDataSet" ng-change="resetLimit();" autocomplete="off" type="text" style="width:300px;" focus>
<i class="search-icon fa fa-search nav-search-icon"></i>
</span>
When I add my second filter 'filter:filterExperessionforPerspective' the data no longer displays on the page and will only display based on filter:filterExperessionforPerspective. 当我添加第二个过滤器“ filter:filterExperessionforPerspective”时,数据将不再显示在页面上,而只会基于filter:filterExperessionforPerspective显示。 The following is a snippet of code for filter:filterExperessionforPerspective using a dropdown: 以下是使用下拉列表的filter:filterExperessionforPerspective代码片段:
Angular code 角度代码
$scope.filterExpressionforPerspective = function(dataset) {
//console.log(dataset.perspective);
//console.log($scope.selectedPerspective.value);
return (dataset.perspective === $scope.selectedPerspective.value);
};
Html dropdown HTML下拉列表
<label for="PerspectiveDD">Perspective
<select name="PerspectiveDD" ng-model="selectedPerspective" style="color:black;" ng-options="Perspective as Perspective.value for Perspective in perspectiveOptions">
{{selectedPerspective.value}}
</select>
</label
Trying to figure out how to use both filters as an 'OR' instead of chaining as an 'AND'...thanks! 试图弄清楚如何将两个过滤器都用作“或”而不是链接为“与” ...谢谢!
create a custom filter 创建一个自定义过滤器
angular.module('app', [])
.filter('customeFilter', function(){
return function(dataset, filter1, filter2){
return dataset.filter(function(item){
(item.property === filter1)|| (item.perspective === filter2.value) ;
}
}
});
and in your html 并在您的html中
<tr ng-repeat="c in datasets | customFilter: filterDataSet:selectedPerspective | orderBy:'-id'" id="{{c.data_id}}" animate-on-change='c.program_name + c.organization + c.data_type_fmv_wami + c.perspective + c.status' ng-animate=" 'animate'">
I ended up using two separate filters: 我最终使用了两个单独的过滤器:
<tr ng-repeat="c in datasets | filter: miataDataFilter | filter: filterDataSet | orderBy:'-id'" id="{{c.data_id}}" animate-on-change='c.program_name + c.organization + c.data_type_fmv_wami + c.perspective + c.dataset_status' ng-animate=" 'animate'">
filterDataSet is taking advantage of animate-on-change using inputted text like so: filterDataSet利用输入的文本利用变化动画,例如:
<input placeholder="Filter data set list ..." class="nav-search-input" ng-model="filterDataSet" ng-change="resetLimit();" autocomplete="off" type="text" style="width:300px;" focus>
miataDataFilter is a custom filter that resides in my datasetCtrl code: miataDataFilter是驻留在我的数据集中的自定义过滤器Ctrl代码:
//custom filter to search dataset by Perspective and/or Data Type
$scope.miataDataFilter = function(dataset){
//creating flags undefined and null selections
var selectivePerspectiveIsDefined = typeof $scope.selectedPerspective != 'undefined' && $scope.selectedPerspective != null;
var selectedDataTypeIsDefined = typeof $scope.selectedDataType != 'undefined' && $scope.selectedDataType != null;
//Perspective is only selected
if(selectivePerspectiveIsDefined && !selectedDataTypeIsDefined){
return (dataset.perspective === $scope.selectedPerspective.value);
}
//Data Type is only selected
else if(!selectivePerspectiveIsDefined && selectedDataTypeIsDefined){
return (dataset.data_type_fmv_wami === $scope.selectedDataType.value);
}
//Perspective and Data Type are both selected
else if (selectivePerspectiveIsDefined && selectedDataTypeIsDefined)
{
return (dataset.perspective === $scope.selectedPerspective.value && dataset.data_type_fmv_wami === $scope.selectedDataType.value)
}
//Nothing is selected
else
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.