所以我有一个看起来像这样的JSON对象:
{
"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;
}
});
此过滤器可以正常工作,因为它会返回所有正确的数据,但我也会得到错误:10 $ digest()迭代。中止&#34;!
任何人都知道为什么会这样吗?
任何帮助表示感谢。
答案 0 :(得分:3)
因为您的过滤器每次都会返回新值(当您按下元素时)。 Angular会发现它不是严格相同的值(===比较),并会触发一个新的摘要。
要解决此问题,您需要不断返回具有完全相同元素的数组。