Javascript $filter正在工作,但导致;错误:已达到10$digest()迭代。流产&引用;
我有一个JSON对象,看起来有点像这样:Javascript $filter正在工作,但导致;错误:已达到10$digest()迭代。流产&引用;,javascript,angularjs,angularjs-filter,Javascript,Angularjs,Angularjs Filter,我有一个JSON对象,看起来有点像这样: { "conversations":[ { "_id": "55f1595d72b67ea90d008", "topic_id": 30, "topic": "First Conversation", "admin": "admin@gmail.com", "__v": 0, "messa
{
"conversations":[
{
"_id": "55f1595d72b67ea90d008",
"topic_id": 30,
"topic": "First Conversation",
"admin": "admin@gmail.com",
"__v": 0,
"messages": [
{
"body": "Hello?",
"timestamp": "2015-09-10T10:20:40.000Z",
"from": "admin@gmail.com",
"_id": "55f1597a72b67ea90d009"
}
],
"to": [
"me@gmail.com"
]
}
]
}
.filter('searchForMessage', function() {
return function(arr, searchString) {
if (!searchString) {
return arr;
}
var result = [];
searchString = searchString.toLowerCase();
angular.forEach(arr, function(conversation) {
for (var i = 0; i < conversation.messages.length; i++) {
if (conversation.messages[i].body.toLowerCase().indexOf(searchString) !== -1) {
result.push({
conversation: conversation,
message: conversation.messages[i].body,
from: conversation.messages[i].from,
timestamp: conversation.messages[i].timestamp
});
}
}
});
return result;
}
});
我正在尝试创建一个自定义过滤器,以便在不同的对话中查找消息。我需要筛选器返回会话、消息、发件人以及与筛选器匹配的消息的时间戳
我的自定义筛选器如下所示:
{
"conversations":[
{
"_id": "55f1595d72b67ea90d008",
"topic_id": 30,
"topic": "First Conversation",
"admin": "admin@gmail.com",
"__v": 0,
"messages": [
{
"body": "Hello?",
"timestamp": "2015-09-10T10:20:40.000Z",
"from": "admin@gmail.com",
"_id": "55f1597a72b67ea90d009"
}
],
"to": [
"me@gmail.com"
]
}
]
}
.filter('searchForMessage', function() {
return function(arr, searchString) {
if (!searchString) {
return arr;
}
var result = [];
searchString = searchString.toLowerCase();
angular.forEach(arr, function(conversation) {
for (var i = 0; i < conversation.messages.length; i++) {
if (conversation.messages[i].body.toLowerCase().indexOf(searchString) !== -1) {
result.push({
conversation: conversation,
message: conversation.messages[i].body,
from: conversation.messages[i].from,
timestamp: conversation.messages[i].timestamp
});
}
}
});
return result;
}
});
.filter('searchFormMessage',函数(){
返回函数(arr、searchString){
如果(!searchString){
返回arr;
}
var结果=[];
searchString=searchString.toLowerCase();
角度.forEach(arr,函数(对话){
for(var i=0;i
这个过滤器工作正常,因为它返回了所有正确的数据,但我也得到了“错误:达到了10$digest()迭代。正在中止!”
有人知道为什么会这样吗
非常感谢您的帮助。因为您的过滤器每次都会返回新值(当您按下元素时)。Angular将看到它不是严格相同的值(==比较),并将触发一个新摘要
要解决这个问题,您需要不断返回一个包含完全相同元素的数组。因为您的过滤器每次都会返回新值(当您推送元素时)。Angular将看到它不是严格相同的值(==比较),并将触发一个新摘要
要解决这个问题,您需要不断返回一个包含完全相同元素的数组。因为您的过滤器每次都会返回新值(当您推送元素时)。Angular将看到它不是严格相同的值(==比较),并将触发一个新摘要
要解决这个问题,您需要不断返回一个包含完全相同元素的数组。因为您的过滤器每次都会返回新值(当您推送元素时)。Angular将看到它不是严格相同的值(==比较),并将触发一个新摘要
要解决这个问题,您需要不断返回具有完全相同元素的数组。我不明白您所说的需要不断返回具有完全相同元素的数组是什么意思?当然,如果我更新搜索项,过滤器的结果不会更新?我的意思是,过滤器函数必须是:对于给定的输入集(数据数组和搜索查询),必须始终返回完全相同的输出。当然,对于不同的输入,您仍然可以返回不同的输出(例如,对于不同的搜索查询),但正常的过滤器每次都会返回新的值吗?很抱歉看起来很固执,但我正努力想办法解决这个问题。它们返回不同的数组,但是相同的对象集。例如,一个有效的过滤器(ES6语法)是
set=>{return set.filter(object=>object.id%2===0)}
,一个无效的过滤器是set=>{return set.map(object=>object.id);}
(因为在第二种情况下,每次调用时都会创建新的不同对象,从而触发一个新的摘要循环ad vitam aeternam)。简而言之:只使用过滤器过滤数据,而不是创建或修改现有的数据。我不明白你说的需要不断返回具有完全相同元素的数组是什么意思?当然,如果我更新搜索项,过滤器的结果不会更新?我的意思是,过滤器函数必须是:对于给定的输入集(数据数组和搜索查询),必须始终返回完全相同的输出。当然,对于不同的输入,您仍然可以返回不同的输出(例如,对于不同的搜索查询),但正常的过滤器每次都会返回新的值吗?很抱歉看起来很固执,但我正努力想办法解决这个问题。它们返回不同的数组,但是相同的对象集。例如,一个有效的过滤器(ES6语法)是set=>{return set.filter(object=>object.id%2===0)}
,一个无效的过滤器是set=>{return set.map(object=>object.id);}
(因为在第二种情况下,每次调用时都会创建新的不同对象,从而触发一个新的摘要循环ad vitam aeternam)。简而言之:只使用过滤器过滤数据,而不是创建或修改现有的数据。我不明白你说的需要不断返回具有完全相同元素的数组是什么意思?当然,如果我更新搜索项,过滤器的结果不会更新?我的意思是,过滤器函数必须是:对于给定的输入集(数据数组和搜索查询),必须始终返回完全相同的输出。当然,对于不同的输入,您仍然可以返回不同的输出(例如,对于不同的搜索查询),但正常的过滤器每次都会返回新的值吗?很抱歉看起来很固执,但我正努力想办法解决这个问题。它们返回不同的数组,但是相同的对象集。例如,一个有效的过滤器(ES6语法)是set=>{return set.filter(object=>object.id%2===0)}
,一个无效的过滤器是set=>{return set.map(object=>object.id);}
(因为在第二种情况下,每次调用时都会创建新的不同对象,从而触发一个新的摘要循环ad vitam aeternam)。简而言之:只使用过滤器过滤数据,而不是创建或修改现有的数据。我不明白你说的需要不断返回具有完全相同元素的数组的意思