2013-09-19 3 views
1

Мой метод run() модуля проверяет, вошел ли пользователь в систему, а затем решает, какой вид загрузить. Представление задвигает с CSS-анимации, но анимация запускается (с помощью - classlist.add() - Я хочу, чтобы передать событие и получить контроллер в ответ на что:Метод задерживания AngularJS до тех пор, пока не будут загружены контроллеры

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() правильно, я предположил, что это будет последнее, что нужно запустить, ожидая, когда все остальное будет загружено первым.

ответ

1

Итак, мое решение состояло в том, чтобы получить список всех контроллеров в модуле, а в конце каждого из них транслировалось событие «Loaded FooCtrl».

я сохранил имя контроллера в массиве в rootScope, затем сделал sort() и join() и проверил строка совпасть с контроллерами собраны из метода, подобный следующему: https://gist.github.com/Willshaw/6621360

Если 2 строки совпадают, Я знал, что все контроллеры загружены, и я могу запустить свое приложение.

Смежные вопросы