$ filter工作但导致"错误:达到$ $ digest()迭代。中止&#34!;

时间:2015-09-18 09:15:21

标签: javascript angularjs angularjs-filter

所以我有一个看起来像这样的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;!

任何人都知道为什么会这样吗?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

因为您的过滤器每次都会返回新值(当您按下元素时)。 Angular会发现它不是严格相同的值(===比较),并会触发一个新的摘要。

要解决此问题,您需要不断返回具有完全相同元素的数组。