gpt4 book ai didi

javascript - 用于在对象数组中搜索的 angularjs 自定义过滤器

转载 作者:行者123 更新时间:2023-11-30 17:16:37 25 4
gpt4 key购买 nike

我有一个对象

{"A":[],"B":[],"C":[],"D":[],"E":[],"F":[{"name":"Fargo","id":29}],"G":[],"H":[],"I":[],"J":[],"K":[],"L":[],"M":[],"N":[],"O":[],"P":[],"Q":[],"R":[],"S":[{"name":"Sullivan","id":23},{"name":"Sven","id":26}],"T":[],"U":[],"V":[],"W":[],"X":[],"Y":[],"Z":[],"#":[]}

我需要根据对象 name 编写一个 angular js 过滤器。每次用户输入新字符时,我都想显示一个结果。

为此,我创建了这个过滤器:

app.filter('alphabeticSearch', function () {
return function (obj,query) {
if (!query) {
return obj;
}
var filtered = {};
for (var i = 65; i < 91; i++) {
filtered[String.fromCharCode(i)] = [];
}
filtered['#'] = [];
for (i in obj) {
var _this = obj[i];
filtered[i] = _this.filter(function (ele) {
var reg = new RegExp(query, "gi");
return reg.test(ele.name);
})
}
return filtered;
};
});

但是 angularjs 抛出一个错误

[$rootScope:infdig] 10 $digest() iterations reached. Aborting!

这就是我在 HTML 中使用过滤器的方式

<input type='text' id='cSearch' ng-model='ent' value='' />
<div ng-repeat="(letter,obj) in item | alphabeticSearch:ent">
....
</div>

最佳答案

那是因为您的过滤器每次都为相同的 objquery 检索一个新实例。

Angular 会在每个 diggest 中评估你的过滤器的表达式以找到变化,所以在每个 diggest 中 Angular 都会检查你的过滤器的结果是什么,除非过滤器 Angular 一个参数发生了变化,期望结果相同。你会认为你的过滤器代码每次都在检索完全相同的东西,但事实并非如此,因为你的函数每次都在创建一个新实例,这让 Angular 认为事情不一样,所以它试图重新- 再次评估以便从您的过滤器函数获得一致的响应,但是您的函数正在再次检索一个新对象,因此 Angular 再次尝试......当这种情况发生 10 次时, Angular 中止进程抛出异常。

更改过滤器中的一些内容应该可以解决问题:

app.filter('alphabeticSearch', function () {
var filtered = {};
var lastObj={};
var lastQuery="";
return function (obj,query) {
if (!query)
return obj;
if(angular.equals(obj, lastObj) && angular.equals(query,lastQuery))
return filtered;

lastObj = angular.copy(obj);
lastQuery = angular.copy(query);
filtered={};
for (var i = 65; i < 91; i++) {
filtered[String.fromCharCode(i)] = [];
}
filtered['#'] = [];
for (i in obj) {
var _this = obj[i];
filtered[i] = _this.filter(function (ele) {
var reg = new RegExp(query, "gi");
return reg.test(ele.name);
})
}
return filtered;
};
});

关于javascript - 用于在对象数组中搜索的 angularjs 自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com