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

Javascript 使用templateUrl的angularjs指令-初始化序列,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我有一个场景,我想在一个控制器中发送一个广播事件,并让一个指令的控制器接收消息。该事件在控制器启动时立即发送,问题在于,由于指令正在使用templateUrl加载视图,因此它是异步发生的,因此在初始化指令控制器之前广播该事件。如果视图位于主页体中,则不会出现此问题,但我猜控制器初始化顺序可能仍然存在问题 我在主控制器中使用以下代码: $rootScope.$broadcast("event:myevent"); $rootScope.initialized = ( $rootScope.ini

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

我在主控制器中使用以下代码:

$rootScope.$broadcast("event:myevent");
$rootScope.initialized = ( $rootScope.initialized||0 ) +1;
我在这里复制了这个问题:

您可以在Javascript控制台中看到,主控制器是在指令的控制器之前初始化的,它从未看到事件

所以我的问题是,是否有一种方法可以等到所有控制器初始化后再广播事件


非常感谢

我已经创建了一个工作版本。事实上,我觉得这是一种非常不干净的做法,但我想不出更好的办法:

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

$rootScope.$broadcast("event:myevent");
$rootScope.initialized = ( $rootScope.initialized||0 ) +1;
在“RegularCtrl”中,我在此计数器上添加了一个手表,如果计数器达到正确的值(所有内容都已初始化),我将发送事件:

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

您是否正在查看?如果是,则可以使用
$viewContentLoaded
事件。这将在加载所有dom后激发


如果您没有使用
ng view
,您可以设置一个变量并使用数据绑定到您的指令。

您使用事件而不是将某个内容附加到范围中有什么特殊原因吗?没有,但我考虑过使用一些人建议的服务,甚至只是范围,但考虑到我的案例中的初始化顺序,我无法立即想到这会有什么帮助。我已经接受了kju的回答,因为这对我来说很有效…不使用ng视图。根据kju的回答,我最终使用了$watch。我同意这不是完全干净的,但这种方法对我有效。谢谢