0

我正在编写一些代码并意识到 angularjs1.5+ 组件实际上并没有接收到$scope.$broadcast事件,这意味着$scope.$on永远不会在组件控制器功能中运行。

虽然我能够$emit从组件控制器接收事件并由父控制器接收$on,但它只是不监听广播事件。

来自家长的广播:$scope.$broadcast('parentEvnt', [1,2,3]);

但未在组件中收到:$scope.$on('parentEvnt', function(event, data){ \\

我创建了这个plunker来显示这个问题。

搜索了一些文章以及关于 SO 的文章,但没有找到任何答案,并且尝试过$rootScope.$broadcast也没有帮助。

并且,如果不可能,那么从应用程序中的任何随机位置通知组件的最佳方式是什么?

4

1 回答 1

3

这里的问题是您broadcast甚至在您的子控制器初始化并开始收听这些事件之前就正在处理该事件。因此,您是否使用$scope$rootScope使用都没有关系broadcast:)

例如,我将您更改为在 2 秒broadcast内将其放入 a$timeout内,它会按预期工作。

$timeout(function() {
  $rootScope.$broadcast('parentEvnt', [1,2,3]);
}, 2000);

不过,理想情况下,您希望在按钮单击或其他一些情况下使用它。

工作示例

于 2017-05-31T13:32:40.803 回答