【发布时间】:2014-03-05 12:04:39
【问题描述】:
我一直在阅读 Angularjs 中的事件传递,但我不相信使用 $broadcast 是个好主意。
one 之类的博客提倡习惯使用 $on,即使它“感觉有点矫枉过正”。
我的困惑是,该实现使用深度优先遍历范围并寻找订阅者,这使得事件的速度取决于您的树结构。 以下是 Angular 中的一些代码:
// 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 相比,使用它有什么好处?
如果我的问题不够清楚,请告诉我,感谢您抽出宝贵时间。
【问题讨论】:
-
这是一个很好的问题,谢谢你的提问。
标签: javascript angularjs publish-subscribe