【发布时间】:2015-08-20 07:16:35
【问题描述】:
我有两个具有父子关系的控制器:
这是父控制器的路由:
angular.module('app')
.config(function ($stateProvider) {
$stateProvider
.state('data-show', {
url: '/data',
templateUrl: 'app/data.html',
controller: 'DataCtrl'
});
});
这是父控制器的 HTML:
<div class="block-header">
...
...
<div ng-include="'components/child_page.html'"></div>
</div>
父控制器代码:
angular.module('app')
.controller('DataCtrl', function ($scope) {
$rootScope.$broadcast('someEvent', [1,2,3]);
});
子控制器是child_page.html页面的一部分,如上所示,使用ng-include标签包含在父页面中。
这是子控制器的外观:
angular.module('app')
.controller('childCtrl', function ($scope) {
$scope.$on('someEvent', function(event, mass) {
console.log('EVENT CALLED');
});
});
子页面的 HTML:
<div ng-controller="childCtrl">
<div id="myGrid"></div>
</div>
但即使我从父控制器广播事件,该事件也不会在子页面中被调用。
【问题讨论】:
-
我敢打赌,原因是在广播事件时子控制器尚未加载 - 所以没有人可以听。在控制器函数中添加一些
console.log将验证这一点。 -
@NikosParaskevopoulos:在我广播事件之前,我正在写信给控制台
broadcasting& 在子控制器的第一行,我正在写信给控制台child controller is loaded。如果我现在检查控制台,我首先会看到broadcasting消息,然后是child controller is loaded。我这里有什么?
标签: angularjs angularjs-scope angularjs-routing angularjs-controller