Успешный переход AngularJs UI-маршрутизатор получить контроллер - PullRequest
1 голос
/ 05 июля 2019

Я создал службу, которая должна запускать любые http-запросы, которые были запрошены.Это выполняется в хуке uS-router onSuccess и выглядит следующим образом:

$transitions.onSuccess({}, function() {
    document.body.scrollTop = document.documentElement.scrollTop = 0;
    console.log('%cwe have completed a transition', 'color: green;');
    httpQueueService.process();
});

Проблема в том, что контроллер инициализируется после этого хука, поэтому я не могу перехватить запросы http без добавления тайм-аута:

function process() {
    $timeout(() => {
        let t = angular.copy(queue);
        console.log('processing', t, t.length);
        queue.forEach((task) => invoke(task));
    }, 500);
}

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

Есть ли способ сделать это?

Я попытался, посмотрев на объект перехода вхук успеха:

$transitions.onSuccess({}, function(transition) {
    console.log(transition);
});

Но, похоже, там нет контроллера

1 Ответ

1 голос
/ 05 июля 2019

То, что вы ищете, это опция «разрешения» состояний ui-роутера. Вы пытаетесь асинхронно загрузить данные (из вашего httpQueueService) в контроллер нового состояния, если я правильно понял ваше описание. Я предлагаю вам взглянуть на официальную документацию по UI-роутерам, особенно на учебники. Очевидно, что вы можете пропустить большую часть этого, поэтому начиная со второго: https://ui -router.github.io / ng1 / tutorial / hellosolarsystem кажется выполнимым для вас.

По сути, он обрабатывает асинхронную природу того, что вы делаете, без добавления какого-либо точного, жестко запрограммированного времени ожидания.

Вот еще одна замечательная статья, которая мне показалась полезной при работе с асинхронными запросами при переходах: https://medium.com/opinionated-angularjs/advanced-routing-and-resolves-a2fcbf874a1c

Надеюсь, это поможет, однако, если у вас возникнут какие-либо более конкретные проблемы, сообщите нам!

...