angularjs – 广播事件之前未设置广播侦听器

在广播事件之前没有设置广播监听器时,有人可以给我一些关于如何处理这种情况的提示吗?

我已经看到了一些$timeout的解决方案,但他们感觉还不错.谢谢!

var app = angular.module('app',[]);

app.controller('ParentCtrl',function ParentCtrl ($scope) {
    this.data = 'parent';
    $scope.$broadcast('parent','Some data'); // event is sent before any listeners are set
});

app.controller('ChildCtrl',function SiblingOneCtrl ($scope) {  
    this.data = 'child';
    $scope.$on('parent',function (event,data) {
      document.write(data); // never activates
    });
});

工作范例:
http://codepen.io/AndriusRimkus/pen/zqMONm

解决方法

在您的情况下,您将始终尝试在任何听众订阅之前进行广播.

那是因为您的ParentCtrl将始终在ChildCtrl之前初始化.
尝试像控制器那样监视控制器.

如果您要向您的子控制器广播内容,那么您需要有一些事件(如点击)来手动开始广播,而不是直接从控制器开始.

相关文章

AngularJS 是一个JavaScript 框架。它可通过 注:建议把脚本放在 元素的底部。这会提高网页加载速度,因...
angluarjs中页面初始化的时候会出现语法{{}}在页面中问题,也即是页面闪烁问题。出现这个的原因是:由于...
AngularJS 通过被称为指令的新属性来扩展 HTML。AngularJS 指令AngularJS 指令是扩展的 HTML 属性,带有...
AngularJS 使用表达式把数据绑定到 HTML。AngularJS 表达式AngularJS 表达式写在双大括号内:{{ expres...
ng-repeat 指令可以完美的显示表格。在表格中显示数据 {{ x.Name }} {{ x.Country }} 使用 CSS 样式为了...
$http是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。读取 JSON 文件下是存储在web服务器上...