我的模块 run() 方法检查用户是否登录,然后决定加载哪个视图。视图通过 CSS 动画滑入,但随着动画的触发(通过 - classlist.add()
- 我想广播一个事件并让控制器对此做出响应:
var myApp = angular.module('myApp', []);
run( function( $rootScope ) {
$rootScope.loadView = function( view, animation ){
// trigger the animation, which sends the $scope.$broadcast();
}
if(localStorage.loggedIn == 'false') {
$rootScope.loadView( 'TutorialView' );
} else {
$rootScope.loadView( 'InterestView', 'slideUp');
}
}
);
myApp.controller('TutorialCtrl', ['$scope', function( $scope ){
console.log('loaded');
$scope.$on('TutorialViewCalled', function( event ) {
console.log('tutorial class called');
});
}]);
在执行动画的服务中,我有以下代码:
console.log('the broadcast is: ' + targetClass+'Called');
$rootScope.$broadcast( targetClass + 'Called' );
console.log('broadcast the call');
我的 console.log() 输出如下所示:
the broadcast is: TutorialViewCalled
broadcast the call
loaded
因此,当loadView()
调用 时run()
,TutorialCtrl
尚未加载。任何后续动画都很好,我用视图中的按钮触发:
the broadcast is: InterestViewCalled
interest class called
broadcast the call
interest class loaded
所以看起来该run()
方法在我的控制器准备好之前正在运行。我是否使用run()
不当,我认为这将是实际运行的最后一件事,等待首先加载其他所有内容。