首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angularjs酒吧对$broadcast

Angularjs酒吧对$broadcast
EN

Stack Overflow用户
提问于 2014-02-07 21:59:26
回答 2查看 9.2K关注 0票数 32

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

像这个one这样的博客主张习惯$on,尽管它“感觉有点过火了”。

我的困惑是,实现使用范围的深度优先遍历并查找订阅者,这使得事件的速度取决于树结构。下面是一些以角度表示的代码:

代码语言:javascript
复制
// 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;
   }
}

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

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

我的问题是,对于$ about /$on范式的动机,我是否遗漏了什么?或者在传统的公共场合使用它有什么好处?

如果我对我的问题不够清楚,请告诉我,谢谢你的时间。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-07 22:34:02

我不认为你错过了什么。您已经成功地概述了每种方法的优缺点。

$broadcast/$on方法不要求您取消订阅,但是它向所有作用域广播的效率并不高。它的进入门槛也很低。您不需要注入任何服务,也不需要创建它们。他们向每个人广播,所以这是一个更简单的方法。

酒吧/分店的方式要直接得多。只有订阅者才能获得事件,因此它并不能在系统中的每个范围内运行。但是,它更复杂,因为您需要使用回调处理程序编写服务,并且必须记住取消订阅。在我看来,记得取消订阅是非常重要的。如果你做得不对,你就会有内存泄漏。三个月后你才会知道这是个问题。

我明白为什么内置的方法是$broadcast

票数 19
EN

Stack Overflow用户

发布于 2015-03-05 20:11:43

我在看同样的问题。特别是如何允许服务在不访问$rootScope的情况下广播和订阅事件(原因如下)。我从这里使用了非常优秀的js信号实现:http://millermedeiros.github.io/js-signals/,并将它包装成一个角服务。

github要点:https://gist.github.com/anonymous/b552c7fafa77427e6d06

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21638563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档