Javascript 角度JS过滤器或语句
我对项目有一个重复声明。然后我有一个下拉列表,选择项目所在的区域。我有它的工作,如果它是一个单一的地区,但我需要检查在多个地区的项目。例如,他们选择了非洲和北美Javascript 角度JS过滤器或语句,javascript,angularjs,angular-filters,Javascript,Angularjs,Angular Filters,我对项目有一个重复声明。然后我有一个下拉列表,选择项目所在的区域。我有它的工作,如果它是一个单一的地区,但我需要检查在多个地区的项目。例如,他们选择了非洲和北美 <div class="column project-thumbnail" data-ng-repeat="project in projects | orderBy:livePredicate:'title' | filter:liveRegion:'region'> 我试着给它传递一个对象,我也试过在另一篇文章中看
<div class="column project-thumbnail" data-ng-repeat="project in projects | orderBy:livePredicate:'title' | filter:liveRegion:'region'>
我试着给它传递一个对象,我也试过在另一篇文章中看到的,关于一个函数的传递方式如下:
$scope.showMovie = function(movie){
return movie.genre === $scope.Filter.Comedy ||
movie.genre === $scope.Filter.Drama ||
movie.genre === $scope.Filter.Action;
非常感谢您的任何建议或帮助。该对象有一个与之比较的project.region,并且可以有任意数量的值。因此,我想显示任何选定的区域。我还没有尝试过,但我相信您应该能够将一个数组传递给自定义筛选器,并在其中应用筛选器逻辑。如下所示:
angular.module('app', []).
filter('regionFilter', function () {
return function (projects, regions) {
var filteredProjects=[]
angular.forEach(projects, function (project) {
if (regions.indexOf(project.region)>=0) {
filteredProjects.push(value);
}
});
return filteredProjects;
};
});
及
其中区域是要作为筛选条件的选定区域的数组
另一方面,您对orderBy的语法似乎是错误的。它应该像
{{orderBy_expression | orderBy:expression:reverse}}
您的解决方案可能类似于构建一个自定义过滤器
因此,如果您有一个可能的标准列表,用“,”分隔(又名csv)
.filter('csvFilter',function(){
返回函数(数据、csv、字段){
返回数据。过滤器(函数(d){
如果(!csv)返回true;
var csvArr=csv.split(',');
对于(变量i=0;i
此过滤器使用javascript avnilla filter()函数
请参见JSFIDLE中的:
更好的解决方案
在角度阵列中使用复杂过滤器可能会降低性能。在这种情况下,我建议使用带有ng hide的简单条件:
html
<ul ng-repeat="project in ctrl.projects">
<li ng-show="ctrl.condition(project.region)">{{project.name}}</li>
</ul>
- {{{project.name}
javascript
this.condition = function(field) {
if (!this.filter) return true;
var csvArr = this.filter.split(',');
for (var i = 0; i < csvArr.length; i++) {
if (field === csvArr[i])
return true;
}
return false;
}
this.condition=函数(字段){
如果(!this.filter)返回true;
var csvArr=this.filter.split(',');
对于(变量i=0;i
可能的解决方案是创建一个自定义过滤器:谢谢您的支持,但我也尝试了。仅返回第一个对象,而不是两个对象都匹配
.filter('csvFilter', function() {
return function(data, csv, field) {
return data.filter(function(d) {
if (!csv) return true;
var csvArr = csv.split(',');
for (var i = 0; i < csvArr.length; i++) {
if (d[field] === csvArr[i])
return true;
}
return false;
});
}
})
<ul ng-repeat="project in ctrl.projects">
<li ng-show="ctrl.condition(project.region)">{{project.name}}</li>
</ul>
this.condition = function(field) {
if (!this.filter) return true;
var csvArr = this.filter.split(',');
for (var i = 0; i < csvArr.length; i++) {
if (field === csvArr[i])
return true;
}
return false;
}