当前位置: 首页 > 面试题库 >

如何停止AngularJS中的$ broadcast事件?

冯嘉荣
2023-03-14
问题内容

是否有一种内置的方法来阻止$broadcast事件进入作用域链?

由事件传递的事件对象$broadcast没有stopPropagation方法(如$
rootScope上
的文档所述。)但是,此合并的pull请求表明$broadcast事件可以对其进行stopPropagation调用。


问题答案:

来自angularJS 1.1.2源代码的片段:

$emit: function(name, args) {
    // ....
    event = {
        name: name,
        targetScope: scope,
        stopPropagation: function() {
            stopPropagation = true;
        },
        preventDefault: function() {
            event.defaultPrevented = true;
        },
        defaultPrevented: false
    },
    // ....
}

$broadcast: function(name, args) {
    // ...
    event = {
        name: name,
        targetScope: target,
        preventDefault: function() {
            event.defaultPrevented = true;
        },
        defaultPrevented: false
    },
    // ...
}

如您所见,$ broadcast中的事件对象没有“ stopPropagation”。

可以使用preventDefault代替stopPropagation来将事件标记为“不需要处理此事件”。这不会停止事件传播,但是会告诉子作用域:“不需要处理此事件”

示例:http://jsfiddle.net/C8EqT/1/



 类似资料:
  • 问题内容: 我可以在AngularJS范围上设置$ watch,以便在我感兴趣的表达式发生更改时得到通知。但是一旦失去兴趣我该如何停止观看? 问题答案: 当调用一个函数时,该函数将取消注册绑定的表达式。 例如,要观看变量仅更改一次: 希望能有所帮助:-)

  • 问题内容: 我正在制作一个演示,其中我将使用固定时间间隔从服务器上获取数据,现在我需要停止/取消此操作。 我该如何实现?如果需要重新启动该过程,该怎么办? 其次,我还有一个问题:经过规定的时间间隔后,我正在从服务器获取数据。有需要使用还是? 这是我的朋克: http://plnkr.co/edit/ly43m5?p=preview 问题答案: 您可以存储间隔返回的承诺并用于该承诺,这将取消该承诺的

  • 问题内容: 因此,我遇到的问题似乎是仅在Linux上发生的错误。我正在尝试在按下某个键时记录我的swing应用程序,然后检测该键何时被释放。现在不应该有问题,因为KeyListener应该可以为我处理这个问题。 问题是,当我按下键时,会得到很多重复的keyPressed()/ keyReleased()事件,而不仅仅是单个keypressed()事件。有谁知道在Linux上何时真正发布密钥的解决方

  • 本文向大家介绍Angularjs中的事件广播 —全面解析$broadcast,$emit,$on,包括了Angularjs中的事件广播 —全面解析$broadcast,$emit,$on的使用技巧和注意事项,需要的朋友参考一下 Angularjs中不同作用域之间可以通过组合使用$broadcast,$emit,$on的事件广播机制来进行通信 介绍: $broadcast的作用是将事件从父级作用域传

  • 问题内容: 我一直在阅读Angularjs中的事件传递,但我不相信使用$ broadcast是个好主意。 像这样的博客一个倡导者已经习惯了美元,即使它“感觉就像矫枉过正。” 我的困惑是,该实现使用范围的深度优先遍历并寻找订阅者,这使事件的速度取决于树的结构。这是角度代码: 此外,似乎您可以使用这些方法来破解依赖项注入。 另一种方法是简单地缓存事件类型和回调并直接调用它们的服务。这要求您清理订阅以避

  • 问题内容: 在摘要循环中,对变量进行脏检查,即是否有100个范围变量,并且如果我更改一个变量,则它将监视所有变量。 假设我有100个彼此独立的范围模型变量。如果我对一个变量进行了更改,那么我不想检查所有其他99个变量。有什么办法吗?如果是,怎么办? 问题答案: 令人惊讶的是,这通常不是问题,即使具有数千个绑定,浏览器也不会出现问题,除非表达式很复杂。的常见答案 是 。 解决方案: 从开始,这很容易