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

AngularJS pubsub vs $ broadcast

夹谷英奕
2023-03-14
问题内容

我一直在阅读Angularjs中的事件传递,但我不相信使用$ broadcast是个好主意。

像这样的博客一个倡导者已经习惯了美元,即使它“感觉就像矫枉过正。”

我的困惑是,该实现使用范围的深度优先遍历并寻找订阅者,这使事件的速度取决于树的结构。这是角度代码:

// 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)) {
     current = current.$parent;
   }
}

此外,似乎您可以使用这些方法来破解依赖项注入。

另一种方法是简单地缓存事件类型和回调并直接调用它们的服务。这要求您清理订阅以避免泄漏。

我的问题是,关于$ broadcast / $ on范式的动机是否遗漏了?还是使用它比传统的pubsub有什么好处?

让我知道我是否对我的问题不够清楚,并感谢您的宝贵时间。


问题答案:

我认为您没有丢失任何东西。您已成功概述了每种方法的利弊。

$broadcast/
$on方法不要求你退订,但因为它广播到所有范围也并不十分有效。它的进入门槛也很低。您不需要注入任何服务,也不需要创建它们。他们向所有人广播,因此这是一种更简单的方法。

发布/订阅方法更为直接。只有订阅者才能获得事件,因此它并不能进入系统中的每个范围来使其发挥作用。但是,它更为复杂,因为您需要使用回调处理程序来编写服务,并且必须记住要取消订阅。在我看来,退订的记忆是巨大的。如果您做得不好,则会发生内存泄漏。在3个月内出现问题之前,您将不知道。

我可以理解为什么内置方法是$broadcast



 类似资料:
  • 问题内容: 在MainActivity中,我有一个TextView:textV1。我在MainActivity中也有一个更新该textview的方法: 在BroadcasrReceiver中,我需要在MainActivity中更新textV1中的文本。 如何才能做到这一点?BroadcastReceiver从服务运行。我无法更改此代码。我可以从onReceive()访问和更改MainActivit

  • 问题内容: 只要我的应用程序正在运行,我就想阻止传入的SMS消息。我 可以实现,但是问题是在我关闭该应用程序甚至重启 甚至卸载它之后,用户将不再能够接收SMS消息。 因此,如何使应用程序仅在运行时 以及关闭或卸载后才阻止传入的SMS,以停止阻止SMS。这是我的 代码: BroadCastReceiver.Java MainActivity.java Manifiest : 注意:我已经在andro

  • 问题内容: 只要我的应用程序正在运行,我就想阻止传入的SMS消息。我可以实现,但是问题是在我关闭该应用程序甚至重新启动甚至卸载它之后,用户将不再能够接收SMS消息。因此,如何使应用程序仅在运行中以及关闭或卸载后才阻止传入的SMS。以停止阻止SMS。这是我的代码: BroadCastReceiver.Java MainActivity.java 体现: 注意:我已经在android模拟器“使用Tel

  • 问题内容: ChooseLanguageFragment.java 这就是调用GetNumberService的方式。 这是从GetNumberService.java传递arraylist的方式 在onHandleIntent()方法中。 GetNumberService可以完美地完成其工作。 ChooseNumber1.java activity_choose_number1.xml cont

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

  • 本文向大家介绍Android BroadcastReceiver实现网络状态实时监听,包括了Android BroadcastReceiver实现网络状态实时监听的使用技巧和注意事项,需要的朋友参考一下 前言:最近公司项目重构,为了提高用户的体验,项目中要求添加当前网络状态的实时监听,以便在无网络状态时给用户友好的提醒并修改UI界面。本文将介绍使用四大组件之一的BroadcastReceiver实

  • 本文向大家介绍深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解,包括了深入Android中BroadcastReceiver的两种注册方式(静态和动态)详解的使用技巧和注意事项,需要的朋友参考一下 今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式。 BroadcastReceiver也就是“广播接收者”的意思,顾名

  • 本文向大家介绍Android BroadcastReceiver基础知识,包括了Android BroadcastReceiver基础知识的使用技巧和注意事项,需要的朋友参考一下 示例 BroadcastReceivers用于接收由Android OS,其他应用程序或同一应用程序内发送的广播Intent。 每个Intent都使用Intent过滤器创建,该过滤器需要String动作。可以在Inten