为什么我的$ emit和$ broadcast示例不起作用?

时间:2014-09-07 12:20:00

标签: angularjs

示例:

<div ng-controller="ParentCtrl as parent" class="ng-scope">
  { { parent.data } }
  <div ng-controller="SiblingOneCtrl as sib1" class="ng-scope">
      { { sib1.data } }
  </div>
</div>


 <script>
function ParentCtrl ($scope) {

  $scope.$broadcast('parent', 'Some data'); // идет вниз!

}
function SiblingOneCtrl ($scope) {

  $scope.$on('parent', function (event, data) {
    console.log(data); // ‘Some data’
  });
}
 </script>

在此论坛上下载示例,人们将其编写为

打开控制台,我没有看到任何效果 等待提示..谢谢你无动于衷的人

2 个答案:

答案 0 :(得分:4)

最有可能发生,因为它甚至在兄弟姐妹的监听器被创建之前触发广播。

a)不要立即广播,例如使用延迟($timeout)..

b)或以其他方式传递数据,使用原型继承甚至服务(您在父级中设置并在兄弟中获取)

c)你最有可能想要用ng-click或者其他东西播放一些东西,不是吗?在这种情况下,它应该可以正常工作。

答案 1 :(得分:4)

foxx告诉右边在parentctrl中使用$ timeout作为:

function ParentCtrl ($scope,$timeout) {
this.data="r";
$timeout(function(){
  $scope.$broadcast('parent', 'Some data'); // идет вниз!
},1000)


}
function SiblingOneCtrl ($scope) {

  $scope.$on('parent', function (event, data) {
    console.log(data); // ‘Some data’
  });
}
工作代码

see plunker