我已经使用angularfire构建了一个网站,我注意到,当网站处于打开状态时,它开始滞后并最终冻结浏览器。
有没有办法可以追溯到源头,看看是什么导致了它?
很有可能是这种双重监视功能,但是当我在$ firebase数组上更改.start()和.end()参数时,我似乎无法正确排序并重新填充。
scope.$watch(function(){
scope.list.$watch(updateList);
return scope.list;
}, updateList);
似乎与嵌套有关。以下工作更好。任何人都可以解释为什么我需要设置两个$ watch?
scope.list.$watch(updateList);
scope.$watch(function(scope){
return scope.list;
}, updateList);
答案 0 :(得分:0)
我认为你误解了如何使用$ watch。正确的语法是。
scope.$watch('list', updateList);
可替换地,
scope.$watch('list', function(newValue, oldValue) {
if (someConditional) {
updateList()
}
});
有关详情,请参阅https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$ watch
答案 1 :(得分:0)
如上所述,此代码将递归地建立侦听器,每次范围发生更改时都会增加资源使用量。
目前还不清楚为什么你选择同时观看范围和列表的$ watch方法,但是其中只有一个是必要的。
list.$watch(function() {
// do whatever needs to be done when the list changes
});
此外,updateList意味着您正在更改列表或复制它。如果您要更改$ watch事件中的列表,则会触发更多监视事件。如果您正在制作列表的副本,那么这些可能是不必要的。
有关用例和最终目标的更多背景信息可能有助于细节。