目前,我有一个控制器,一个过滤器文件和html。现在我有了它,所以在html中,我调用了一个ng-repeat,里面有一堆我基于过滤器im创建的自定义过滤器,例如:ng-repeat="p in persons = (person | toArray | filterHeight:height | filterAge:age | filterEthnicity:ethnicity)"
我想添加的是基本上只更改filterEthnicity函数,以便如果我选择按种族进行过滤,它将在列表的顶部显示选定的种族组,并在过滤结果下方显示其余未选定的组。基本上是一个“未经过滤的列表”。我看到的解决方案是,在函数中,我可以将其更改为返回对象或多个数组,但这对我不起作用,因为我使用1 ng-repeat进行的所有其他过滤器,所以我只能返回一个数组。我看到我可以做这样的事情:filterEthnicity:ethnic:unfiltered在html中使用在controller $scope中创建的变量。未经过滤
我得到的问题是,在函数中,我需要在每次调用时重置值,例如unfiltered = [],但当我添加该值并在控制器中打印值时,它始终为空,但在函数中它被填充
在控制器中,我创建了一个类似$scope的变量。未过滤= []
.filter('filterEthnicity', function() {
return function(values, keys, unfiltered) {
let filtered = [];
unfiltered = []
values.forEach(obj => {
if (obj.person.ethnicity in keys) {
filtered.push(obj);
break;
}
if (filt_list.indexOf(obj) === -1) {
unfiltered.push(obj);
}
});
return filtered;
}
});
所以在代码中,当我在filterEthnicity函数中打印未过滤时,它正在被填充,但当我尝试打印$scope时。在控制器中未过滤它是空的,所以当我尝试在第一个ng-repeat之后在html中使用它时,就像简单的第二个ng-repeat一样ng-repeat="val in unfiltered"{{val.name}}
结果什么都没有
我主要是困惑为什么$范围。未筛选的变量一直显示为空。
1条答案
按热度按时间wko9yo5t1#
试试这个
创建一个Angular模块并定义一个名为startsWithLetter的自定义过滤器,该过滤器根据每个字符串是否以指定的字母开头来过滤字符串数组:
startsWithLetter过滤器接受两个参数:items,要筛选的字符串数组,letter,要筛选的字母。过滤器逻辑很简单:它遍历items数组中的每个项目,检查项目的第一个字母是否与指定的字母匹配,如果匹配,则将项目添加到筛选的数组中。
接下来,让我们创建一个Angular控制器,它定义了一个字符串数组和一个变量来存储要过滤的字母:
DemoCtrl控制器使用controllerAs语法来定义一个变量vm,用于存储控制器的属性。items属性是要筛选的字符串数组,letter属性存储筛选所依据的字母
ng-repeat指令用于迭代过滤后的vm。items数组,传递vm。将letter变量作为第二个参数添加到startsWithLetter筛选器