Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
$$广播上的angularjs错误_Angularjs - Fatal编程技术网

$$广播上的angularjs错误

$$广播上的angularjs错误,angularjs,Angularjs,我有一个angular脚本,它在$rootScope上广播一个事件(使用$$broadcast)。 我使用的angular版本是1.1.4 在某些情况下,这会在angular代码中引发异常: 未捕获的TypeError:无法读取null的属性“$$nextSibling” 有人知道是什么导致了这个错误吗?不幸的是,发生此错误的代码太大,无法发布,但也许有人可以为我指出正确的方向 发生这种情况的角度代码是: // Insanity Warning: scope depth-first tra

我有一个angular脚本,它在$rootScope上广播一个事件(使用$$broadcast)。 我使用的angular版本是1.1.4

在某些情况下,这会在angular代码中引发异常:

未捕获的TypeError:无法读取null的属性“$$nextSibling”

有人知道是什么导致了这个错误吗?不幸的是,发生此错误的代码太大,无法发布,但也许有人可以为我指出正确的方向

发生这种情况的角度代码是:

   // Insanity Warning: scope depth-first traversal
      // yes, this code is a bit crazy, but it works and we have tests to prove it!
      // this piece should be kept in sync with the traversal in $digest
      if (!(next = (current.$$childHead || (current !== target && current.$$nextSibling)))) {
        while(current !== target && !(next = current.$$nextSibling)) {
关于while语句

更新:广播是从外部组件上单击的事件内部执行的
单击事件是外部组件的配置对象的属性。

问题在于在作用域上使用或不使用$$apply。有时我需要在其他场合使用$$apply,因为我已经处于应用阶段。。。Sp I最终实现了safeApply(可以在互联网上找到)。想知道为什么这不是angular中的标准实现,因为它实现起来非常简单,并且简化了编码

$timeout(function(){
    //do stuff
});

$timeout
没有等待时间也能工作。

哎哟。我认为代码在一个摘要周期中运行,以查找所有作用域。似乎当前的
未定义。你用示波器有什么奇怪的地方吗?比如创建自己的,或者手动销毁它们?我不知道。。。有关发生情况的更多信息,请参见更新。非常感谢您的提示!我必须像这个$scope一样在函数上包装$on。$on(…){$timeout(…(){myStuff();})}。经历了几个小时的挫折!这是使用angular 1.0.8。谢谢。我相信这会让我少受几个小时的挫折!谢谢,这对我也有用!你有什么解释吗,为什么会这样?在我的示例中,我在侦听事件时调用
scope.$destroy()
。$timeout可以正常工作,每秒钟调用一次都不会出现异常。它会强制函数排队等待下一次
$digest
,而不是中断当前调用,并导致其他可能尚未完成的项出现问题。您可能会想知道为什么会出现所有的否决票。你所说的被Angular团队认为是反模式的。虽然“安全应用”方法有效,但它不是正确的解决方案。最好用$timeout()包装代码,以便在下一个摘要中正确应用代码。有关反模式,请参见此处: