javascript - 小部件屏幕上的服务/模块之间的通信

标签 javascript angularjs

我们正在实现一个由多个小部件/模块组成的小部件屏幕:

  • 产品:列出产品
  • 产品详细信息:一旦“产品”中的选择发生变化,就会从服务器加载产品详细信息。
  • 相关产品:一旦“产品”中的选择发生更改,就会从服务器加载相关产品。
  • 比较:点击“产品详细信息”中的“比较”后,会在服务器上执行一些操作。

Widget Screen with 4 Widgets

听起来很简单,对吧?我们的问题是,我们无法找到组件如何相互通信的良好解决方案。它们应该尽可能松散耦合。因此,我不希望“产品”小部件知道“产品详细信息”小部件和“相关产品”小部件的存在。也许某些小部件现在甚至没有显示在屏幕上(所以那里不应该发生任何事情)。

我们想到的唯一解决方案是使用 $rootScope.$broadcast 和 $rootScope.$on 来处理“ProductSelectionChanged”或“CompareClicked”等事件。

不幸的是,据我了解,$rootScope.$broadcast 似乎会导致性能问题: What's the correct way to communicate between controllers in AngularJS? 并且 Christoph 使用 $rootScope.$emit 提出的解决方案在 IE8 中不起作用。

我应该只使用 $rootScope.$broadcast 吗?或者有更好的解决方案吗?

感谢您的帮助!

干杯 迈克尔

最佳答案

我并不声称这是最好的解决方案,但我遇到了组件之间的相同通信问题和 $scope.$broadcast() 性能问题。我们决定与我的团队一起开发一个小型的 PubSub 服务。它非常简单,可以通过参数快速传达事件。

如果您想尝试一下,可以在这里找到:angular-pubsub

关于javascript - 小部件屏幕上的服务/模块之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21680122/

相关文章:

javascript - 如何在 PaperJS 中将图像添加到路径

.net - 在javascript中只允许小数点后两位

javascript - 悬停区域开火功能

javascript - 使用每次都不同的 transclude 重复指令

javascript - 智能表格排序不起作用

javascript - 无法更新 ng-repeat 中数组更新的 View ($scope.$apply())不起作用

angularjs - 如何使用 angular2 拦截 http 错误?

javascript - 如何在Vue js中处理未定义的 "Error in render: TypeError: Cannot read property ' abc'

javascript - ng-click 错误 : [$parse:syntax] Syntax Error: Token 'Object' is unexpected, 期待 []]

AngularJs Run block $stateChangeStart 没有被触发