Angularjs - Как запустить код, когда все приложение загружено? - PullRequest
0 голосов
/ 26 апреля 2018

Начнем с того, что я впервые пробую AngularJs (1.6), и у меня недостаточно опыта, поэтому я могу задавать неправильные вопросы.

Итак, недавно я начал работать над сборкой проекта на AngularJS.1.6.

Задача, которую я должен выполнить, - запустить скрипт на определенных маршрутах.Допустим, на данный момент скрипт выглядит следующим образом:

alert('Hello World');

После долгого исследования я обнаружил, что должен использовать $state, из которого я могу получить доступ к $state.current.name изатем в своем коде я могу использовать оператор if или оператор switch для запуска моего кода.

Проблема с этим решением состоит в том, что если я пытаюсь получить доступ к $state.current.name, когда мое приложение загружается, значение является пустой строкой.

Чтобы убедиться, что $state.current.name возвращает значение в какой-то момент, я сделал следующее:

setTimeout(
    () => console.log($state.current.name),
    3000
);

и тогда я вижу, чтоУ меня есть нужное значение.

Наконец, я также попробовал методы компонентов жизненного цикла, run() метод modules и, наконец, resolver в маршрутах, но ни один из них не работал для меня.

В любой из сделанных мной попыток $state.current.name был пуст, хотя всегда работал, когда я использовал setTimeout.

. В качестве окончательного решения я нашел следующеене элегантный:

var interval = setInterval(
    () => {
        if ( 0 !=== $state.current.name ) {
            clearInterval(interval);
            alert('Hello World');
        }
    },
    250
);

Итак, вопрос в том, есть ли лучшее решениечтобы получить доступ к указанному названию маршрута.

Edit # 1

Я просто попробую этот код:

// ...

require('angular')
    .module(config.appName, moduleCollection)
    .run(
        $state => console.log($state.current.name)
    );

и все еще становлюсь пустымстрока :(.Любое другое решение?

1 Ответ

0 голосов
/ 26 апреля 2018

Вы можете использовать uiRouter stateChange события:

Там вы можете указать условие для проверки названия вашего штата:

if(toState.name == 'something')
{
  alert(toState);
  alert(fromState);
}

когда state успешно изменено:

Их необходимо использовать в функции run

.run(['$state', '$rootScope', function($state, $rootScope) {
    $rootScope.$on('$stateChangeSuccess', function(e, toState, toParams, 
  fromState, fromParams) {
        if(toState.name == 'something')
        {
          alert(toState);
          alert(fromState);
        }
    }); 

}])

, когда начинается изменение state:

$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) {
    alert(toState);
    alert(fromState);
}); 

Вот документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...