1

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

4

1 に答える 1