Должна ли ошибка в конструкторе перенаправленного компонента завершиться с ошибкой перехода маршрута ui-router? - PullRequest
0 голосов
/ 31 мая 2019

Я использую пакет @ uirouter / angularjs 1.0.22 npm в своем проекте angularjs 1.6.10.Я только что выполнил миграцию из унаследованного пакета ui-router и теперь начал маршрутизировать к компонентам.

То, о чем я думал, пытался сделать, это использовать ловушку перехода onError, чтобы обрабатывать случаи, когда происходит вызов APIв состоянии 403 или 401.Я мог бы получить более детальный, чем использование перехватчика angularjs (например, обрабатывать ошибку по-разному в зависимости от маршрута).Это также позволило бы некоторым дочерним директивам / компонентам выполнять вызовы API, которые не проходят через перехватчик для обработки ошибок.

Кажется, что любые ошибки в функции разрешения, onEnter, onStart и т. Д. Приводят кошибка перехода.В ходе тестирования я также вижу, что конструктор контроллера компонента и $ onInit вызываются перед вызовом глобального хука $ transition.onSuccess, который я создал в блоке запуска моего приложения.Это хорошо, но если я сгенерирую ошибку из конструктора или $ onInit, это не приведет к ошибке перехода.Кто-нибудь знает, является ли это намерением?

Если это так, это в основном означает, что мне придется переместить логику инициализации компонента (которая включает вызовы API, которые могут привести к 401 или 403) в нечто подобноерешимость.Короче говоря, есть ли способ использовать ui-router как несколько универсальный обработчик ошибок для ошибок, возникающих во время инициализации компонента?

Какой-то действительно краткий код, объясняющий это лучше: Блок запуска основного приложения

.run([
        '$transitions',
        $transitions => {
            $transitions.onStart({}, (trans:Transition) => {
                console.log('going to: ', trans.to().name);
            });
            $transitions.onSuccess({}, (trans:Transition) => {
                console.log('transition successfully routed to: ', trans.to().name);
            });
            $transitions.onError({}, (trans:Transition) => {
                if(trans.error() && trans.error().detail.status === 401) {
                    //Handle 401 here (something like save the state the user was attempting to go to)
                    console.log('transition had an error: ', trans.error().message);
                }
            });
    }])

Компонентный контроллер:

class RoutedToComponentController implements ng.IComponentController {

    public static $inject = [

    ];

    constructor(
    ) {
        console.log('throwing error');
        throw Error("error in component constructor");

        //Realistically, some async setup will be done here that might error
    }

Пример выше никогда не попадет в onError, даже если конструктор будет вызван первым (в надежде, что он вызовет ошибку перехода).

...