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

如何取消订阅angularJS中的广播事件。如何删除通过$ on注册的功能

楚望
2023-03-14
问题内容

我已经使用$ on函数将监听器注册到$ broadcast事件中

$scope.$on("onViewUpdated", this.callMe);

我想根据特定的业务规则取消注册此侦听器。但是我的问题是,一旦注册,我将无法注销。

AngularJS中是否有任何方法可以取消注册特定的侦听器?诸如$ on之类的方法可以注销该事件,可能是$ off。因此,基于业务逻辑,我可以说

 $scope.$off("onViewUpdated", this.callMe);

并且当有人广播“ onViewUpdated”事件时,该函数将停止调用

谢谢

编辑 :我想注销另一个功能的侦听器。不是我注册的功能。


问题答案:

您需要存储返回的函数并调用它以取消订阅该事件。

var deregisterListener = $scope.$on("onViewUpdated", callMe);
deregisterListener (); // this will deregister that listener

至少在1.0.4中可以在源代码中找到它:)。我将发布完整的代码,因为它很短

/**
  * @param {string} name Event name to listen on.
  * @param {function(event)} listener Function to call when the event is emitted.
  * @returns {function()} Returns a deregistration function for this listener.
  */
$on: function(name, listener) {
    var namedListeners = this.$$listeners[name];
    if (!namedListeners) {
      this.$$listeners[name] = namedListeners = [];
    }
    namedListeners.push(listener);

    return function() {
      namedListeners[indexOf(namedListeners, listener)] = null;
    };
},

另外,请参阅docs。



 类似资料:
  • 问题内容: 我有以下几点: 据我了解,我需要取消注册监听事件。有人可以告诉我如何编码/执行此操作吗? 问题答案: 如果您不取消注册该事件,则将发生内存泄漏,因为传递给您的函数将不会被清除(因为对该函数的引用仍然存在)。更重要的是,在其范围内引用函数的任何变量也将泄漏。如果在应用程序中多次创建/销毁控制器,则将导致多次调用函数。幸运的是,AngularJS提供了两种有用的方法来避免内存泄漏和不良行为

  • 我有一个Spring靴2.0.0。M7 Spring Webflux应用程序,其中我使用的是Thymeleaf Reactive。 我注意到,在我的微服务上,当我在SSE模式(文本/事件流)下调用一个返回数据流的endpoint时,即使该数据流已被正确处理,也会在该数据流上发生cancel()。 例如,这里有一个简单的控制器endpoint: 以下是我在SSE模式下请求时得到的订阅流量日志: 我们

  • Tendermint 会发出不同的事件,您可以通过Websocket订阅这些事件。这对于第三方应用程序(如 analysys)或检查状态非常有用。 事件列表 您可以通过 Websocket 调用 subscribe RPC 方法订阅上面的任何事件。 { "jsonrpc": "2.0", "method": "subscribe", "id": "0", "para

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

  • 本章介绍 UDP 介绍 ChannelHandler, Decoder, 和 Encoder 引导基于 Netty 的应用 前面的章节都是在示例中使用 TCP 协议,这一章,我们将使用UDP。UDP是一种无连接协议,若需要很高的性能和对数据的完成性没有严格要求,那使用 UDP 是一个很好的方法。最著名的基于UDP协议的是用来域名解析的DNS。这一章将给你一个好的理解的无连接协议所以你能够做出明智的

  • 问题内容: 在该程序包下,您有诸如和之类的类,我想可以将其描述为一些可用的示例。 这些主题如何退订?没有方法,并且调用完全结束了Observable,对吗? 问题答案: 同时是an 和an ,可以像普通可观察对象一样取消订阅。使主题特别之处在于它是可观察者和观察者之间的桥梁。它可以通过释放观测到的项目,也可以发射新的项目。就像对期货的承诺一样,主体是可观察的对象。 这是主题科的简短说明: Asyn