javascript - 使用 templateUrl 的 angularjs 指令 - 初始化序列

标签 javascript angularjs angularjs-directive

我有一个场景,我想在一个 Controller 中发送广播事件并让指令的 Controller 接收消息。事件在 Controller 启动时立即发送,问题是因为指令使用 templateUrl 加载 View ,它是异步发生的,所以事件在指令 Controller 初始化之前广播。如果 View 位于主页面主体中,则不会发生此问题,但我猜 Controller 初始化顺序可能仍然存在问题。

我在我的主 Controller 中使用以下代码:

$rootScope.$broadcast("event:myevent");

我在这里重现了这个问题:http://jsfiddle.net/jugglingcats/7Wf8N .

您可以在 Javascript 控制台中看到主 Controller 在指令的 Controller 之前初始化,并且它从未看到该事件。

所以我的问题是是否有办法等到所有 Controller 都初始化后再广播事件?

非常感谢

最佳答案

我已经创建了一个工作版本。我实际上觉得这是一种非常不干净的方法,但我想不出更好的方法:http://jsfiddle.net/7Wf8N/3/

我所做的是:在指令中我添加了一些代码,这些代码将在初始化时增加 $rootScope 中的计数器。我使用计数器是因为正如您所说,您想等待多个 Controller :

$rootScope.initialized = ( $rootScope.initialized||0 ) +1;

在“RegularCtrl”中,我在此计数器上添加了一个 watch ,如果计数器达到正确的值(一切都已初始化),我将发送事件:

$rootScope.$watch('initialized', function() {
    if ( $rootScope.initialized == 1 ) {
        $rootScope.$broadcast("event:myevent");        
    }
});

关于javascript - 使用 templateUrl 的 angularjs 指令 - 初始化序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058192/

相关文章:

javascript - 选择列表为空时水平缩小

javascript - 如何使用 AngularJs、Ui-Router 和 MongoDB 轮询数据库并填充 Controller ?

java - 如何从 Selenium 和 JUnit 检索 li 中 AngularJS 生成的内容?

AngularJS错误: [$compile:nonassign]

javascript - 将类别应用于选定的 LI 和所有以前的 LI

javascript - 一旦检测到搜索框中的输入,就会出现一个很棒的字体图标

javascript - AngularJS ngModelController 基本问题

angularjs - 如何在 Angular UI 引导对话框中使用模板?

javascript - 如何在 Angular js中将数据放入 session 中

javascript - 与 Angular Directive(指令) Controller 的两种方式数据绑定(bind)