私のモジュールの 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()
適切に使用していないのでしょうか、他のすべてが最初にロードされるのを待って、実際に実行するのは最後になると思いました。