Javascript 这些$scope事件起诉$broadcast和$emit有什么问题?

Javascript 这些$scope事件起诉$broadcast和$emit有什么问题?,javascript,angularjs,events,Javascript,Angularjs,Events,我想要的是SubCtrl在加载事件时广播一个事件,表示它想要获取信息。我希望MainCtrl监听对get事件的调用,并通过广播“set”事件并提供其name属性作为参数进行响应。SubCtrl应该侦听set事件,并通过填充自己的作用域name属性来响应 使用以下代码,MainCtrl接收get事件,但SubCtrl从不接收set事件 app.controller('SubCtrl', function($scope, $rootScope) { $scope.name = '..waitin

我想要的是
SubCtrl
在加载事件时广播一个事件,表示它想要获取信息。我希望
MainCtrl
监听对
get
事件的调用,并通过广播“set”事件并提供其
name
属性作为参数进行响应。
SubCtrl
应该侦听
set
事件,并通过填充自己的作用域
name
属性来响应

使用以下代码,
MainCtrl
接收
get
事件,但
SubCtrl
从不接收
set
事件

app.controller('SubCtrl', function($scope, $rootScope) {
  $scope.name = '..waiting';
  $scope.$on('set', function(event, name) {
    console.log('set event received');
    $scope.name = name;
  });
  $rootScope.$broadcast('get');
});
剧本 加成

你好{{{name}

你好{{{name}


我再一次立刻意识到了这个问题。我需要在
$broadcast
获取
事件之前设置
$on
侦听器

app.controller('SubCtrl', function($scope, $rootScope) {
  $scope.name = '..waiting';
  $scope.$on('set', function(event, name) {
    console.log('set event received');
    $scope.name = name;
  });
  $rootScope.$broadcast('get');
});

根据应用程序的大小,使用
$rootScope.$broadcast
可能会导致性能贪婪。(有关更多信息,请参阅。)

如果要在同级节点上的控制器之间通信,有两种方法:

  • 使用公共父控制器
  • 使用共享服务

与我的团队一起,我们决定开发一个小型酒吧/酒吧服务来解决类似的问题。如果你想试试,这是我们的。

现在可以用了吗?我很惊讶,因为应该使用
$broadcast
将事件分派到子作用域,并使用
$emit
将事件分派到父作用域(根据)。如果要在同级节点上的控制器之间通信,有两种方法:使用公共父控制器或使用服务,如发布/订阅服务。我选择了第二种解决方案。如果你想试试,我的子服务就在这里:。嘿,这是个好主意!我会查一查。我的代码确实有效,因为我是
$broadcast
-ing自
$rootScope
并收听
$on
本地范围。我很高兴您喜欢这个想法:)我将添加它作为更好的可视性的答案。请在试用PubSub时给我您的反馈;)你完全正确地认为$broadcast是错误的选择。我现在按照你的建议使用服务+1美元。问题不一样,但你也是对的。
app.controller('SubCtrl', function($scope, $rootScope) {
  $scope.name = '..waiting';
  $scope.$on('set', function(event, name) {
    console.log('set event received');
    $scope.name = name;
  });
  $rootScope.$broadcast('get');
});