19

当我销毁自己的作用域时,我的程序中不断出现此错误。我在角度内追踪到这个while循环:

if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
    while(current !== target && !(next = current.$$nextSibling)) {
        current = current.$parent;
    }
}

我还设法在 jsFiddle 中复制它:http: //jsfiddle.net/kEyqz/1/

它很容易设置,在一个元素上我连接一个点击事件,然后 $broadcast 它被点击,然后是一个 $apply。

在一个单独的指令(带有子范围)中,我监听该事件,如果我看到它,我会销毁子​​范围。这样做会产生错误:

Uncaught TypeError: Cannot read property '$$nextSibling' of null 

这只是我试图在我的代码中完成的一个小例子。

在 current = current.$parent 之前的控制台日志记录会导致范围没有 $parent(它设置为 null)。

我可以添加以下行:

if(!current){
    break;
}

在 current = current.$parent 之后,但如果我切换角度版本,我必须维护它(不理想)

4

1 回答 1

23

这是你要找的http://jsfiddle.net/jw99Lj7t/吗?

您正在$destroy执行$scope治疗digest周期 - 这导致了错误。

我不相信这是一个,bug因为这是digest循环的实现方式(它循环$scopes检查是否有更改的列表,我们不能从该列表中删除范围,因为它“已经在使用”)。

解决这个问题可能会带来很多复杂性,并且由于digest必须非常快,因此最好为您正在做的事情找到一种不同的方式。

于 2013-09-10T22:28:10.223 回答