ng-repeat
我遇到了一个非常奇怪的性能问题。即使使用track by
,我的重复似乎也在不断发生。
从上面的gif可以看出,我的li
元素在开发工具中不断闪烁(使用Chrome开发工具和Firefox开发工具测试),这意味着DOM元素不断被更新/重复。这大大降低了浏览器的性能,并且通常会导致Firefox崩溃。
最初,只有10个li
元素,但如果用户向下滚动,我会加载另外10个,因此无限滚动。大约3-4次加载(30-40 li
个元素)后,浏览器无响应。
我注意到gif中的第一个li
会在短时间内收到id
id="sizzle1458257524957"
属性,然后消失。我以前从未见过它,它绝对不是来自我自己的代码。不确定这是否是罪魁祸首。
我尝试将$watch()
添加到postData
使用的ng-repeat
范围变量中,然后记录以查看它何时更新,尽管它只会更新两次,所以我是仍然感到困惑的是为什么li
元素总是在更新。
值得注意的是,我使用的是jQuery(2.2.0),但不适用于这些元素上的任何事件处理程序。我的角度版本是1.5.0。
答案 0 :(得分:0)
感谢所有为解决这个问题提供帮助的人。
经过大量的调试和测试后,我设法解决了这个问题。问题是在我的ng-disabled
元素中的textarea上使用li
内的范围函数。
这是功能:
$scope.isCommentInputEmpty = function(commentPostId) {
if($(".newsFeedPostItem[data-id='" + commentPostId + "']").find(".feedItemNewComment .taggableInput").val() === '') {
return true;
} else {
return false;
}
};
然后我有一个ng-disabled="isCommentInputEmpty(post.id)"
所以我猜测Angular几乎经常运行该函数来检查textarea是否应该禁用它。
要解决这个问题,我只需在我的textarea中添加一个模型,例如ng-model="post.textareaModel"
,并使用ng-disabled="post.textareaModel == ''"
在模型为空时禁用该按钮。