2013-10-04 2 views
2

У меня есть функция запуска для модуля и внутри него есть привязка события $routeChangeStart. Я хотел бы узнать время первого запуска событияChangeStart. Я ожидаю, что он должен быть вызван сразу после первого запроса, но до того, как будет отображаться любая страница, но это не так, как я ожидал. Кажется, что событие вызывается после того, как страница начала отображаться.Order of routeChangeStart событие и рендеринг

module.run(function ($location, $rootScope) { 
     $rootScope.$on("$routeChangeStart", function (event, next, current) { 
     //do something with next.xxx 
     }); 
    }) 

Каково ожидаемое поведение? Или это ошибка?

ответ

0

Событие запускается до начала рендеринга страницы, но это не значит, что вы поймаете его до начала рендеринга. Событие увольняется, затем следующая вещь в стеке вызовов - это когда Angular начинает рендеринг страницы (выборка шаблона, ожидание свойства разрешения маршрута и т. Д.), И после этого вы поймаете событие. От angular docs ...

Передано до изменения маршрута. На этом этапе услуги маршрута начинают решать все зависимости, необходимые для изменения маршрута . Обычно это включает в себя выборка шаблона представления, а также как любые зависимости, определенные в свойстве свойства route. Как только все зависимости разрешены, $ routeChangeSuccess запускается.

Если вам нужно сделать что-то вроде условного предотвращения изменения, попробуйте вместо этого использовать событие $locationChangeStart. Например ...

$scope.$on('$locationChangeStart', function (event) { 
    if (someCondition) { 
     event.preventDefault(); // prevent the change 
    } 
}); 

Это будет работать до того, как Angular начнет загрузку новой страницы.