无法读取属性'$$ nextSibling'的null

Mat*_*erg 18 angularjs

当我销毁自己的示波器时,我的程序中不断出现此错误.我跟踪到了这个while while循环中的角度:

if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
    while(current !== target && !(next = current.$$nextSibling)) {
        current = current.$parent;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

它很容易设置,在一个元素上我点击一个点击事件然后$广播点击它然后是$ apply.

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

Uncaught TypeError: Cannot read property '$$nextSibling' of null 
Run Code Online (Sandbox Code Playgroud)

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

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

我可以添加这些行:

if(!current){
    break;
}
Run Code Online (Sandbox Code Playgroud)

在当前=当前.$ parent之后,但如果我切换角度版本,我必须保持它(不理想)

g00*_*0fy 22

这是你在寻找什么http://jsfiddle.net/jw99Lj7t/

你被$destroy"荷兰国际集团的$scopedurgin digest周期-这是造成错误.

我不相信这是一个,bug因为这是digest循环的实现方式($scopes如果某些内容发生了变化,它会循环检查列表,并且我们无法从该列表中删除范围,因为它已经"已在使用中").

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

  • 使用setTimeout方法,如果其他内容正在侦听要销毁的范围,则需要运行$ apply().通过将它包装在$ timeout中我只是确保它在循环中稍后发生,这是在广播完成之后(问题出在哪里) (2认同)