app.run(function () {
console.log('run');
})
Как вы помните, app.run выполняется как только наше приложение инициализировалось. В браузере мы видим run в консоли.\\
\\
Теперь давайте заинджектим в run $rootScope.
app.run(function ($rootScope) {
console.log('run');
})
Когда мы используем ngRoute, то мы можем на любой роут повесить event.
app.run(function ($rootScope) {
console.log('run');
$rootScope.$on('$routeChangeStart', function (event, current, previous, reject) {
console.log('changeStart', arguments);
})
})
Первым параметром идет название евента. Вторым параметром идет функция с аргументами. Как мы видим в консоли у нас произошел routeChangeStart евент при начале загрузки роута и у нас есть массив из нескольких обьектов. Первым обьектом является event. То есть то событие, которое происходит. Вторым параметром у нас идет current. Это обьект с данными текущего роута. Теперь при изменении роута у нас всегда происходит event changeStart, как только мы переключаемся между роутами. Если мы посмотрим на обьект, то мы видим, что у нас постоянно меняется роут. Например, мы можем из него вытащить контролле, originalPath или любую другую нужную нам информацию.\\
\\
Точно так же как routeChangeStart есть евент routeChangeSuccess.
app.run(function ($rootScope) {
console.log('run');
$rootScope.$on('$routeChangeStart', function (event, current, previous, reject) {
console.log('changeStart', arguments);
})
$rootScope.$on('$routeChangeSuccess', function (event, current, previous, reject) {
console.log('changeSuccess', arguments);
})
})
Как мы видим, сейчас в консоли у нас выстреливает два события. routeChangeSuccess и routeChangeStart. И это очень удобно, потому что мы можем подписываться, как и до перехода на какой-то роут, чтобы реализовать какую-то логику перед переходом, так и на success абсолютно любого роута.\\
\\
Давайте, например, на success в rootScope запишем переменную currentPath
$rootScope.$on('$routeChangeSuccess', function (event, current, previous, reject) {
console.log('changeSuccess', arguments);
$rootScope.currentPath = current.$$route.originalPath
})
Теперь в rootScope у нас всегда будет правильный path. И он у нас всегда будет перезаписываться на routeChangeSuccess.\\
\\
Теперь давайте в наш index.html добавим
Current path is: {{currentPath}}
И добавим контроллер
app.controller('pathCtrl', function () {
});
Нам не нужно ничего передавать так как currentPath береться с rootScope по цепочке прототипов.\\
\\\
Как мы видим, если мы обновим страницу, то нам выводится currentPath. Если мы переходим на другой роут, то currentPath меняется.
\\
Вот так вот с помощью всего одной переменной мы на routeChangeSuccess сетим originalPath и она у нас доступна абсолютно везде. Поэтому когда вам нужно отловить какое-то событие и что-то сделать в этот момент, то вам поможет app.run и евенты.