路由到组件的构造函数中的错误是否应该使ui-router路由转换失败?

时间:2019-05-30 22:17:02

标签: angularjs angular-ui-router

我在我的angularjs 1.6.10项目中使用了@ uirouter / angularjs 1.0.22 npm软件包。我刚刚从旧版ui-router包中进行了迁移,现在已经开始路由到组件。

我想尝试做的是使用onError转换钩子来处理API调用导致403或401状态的实例。与使用angularjs拦截器相比,我可以获得更精细的信息(例如,根据路线来不同地处理错误)。它还将允许某些子指令/组件进行不通过拦截器进行错误处理的API调用。

似乎在resolve函数,onEnter,onStart等中的任何错误都会导致转换错误。在测试中,我还可以看到在应用程序的运行块中创建的全局$ transition.onSuccess钩子之前,将调用组件的控制器的构造函数和$ onInit。很好,但是如果我从构造函数或$ onInit中抛出错误,则不会导致转换错误。有人知道这是意图吗?

如果是这种情况,那基本上意味着我必须将组件初始化逻辑(包括可能导致401或403的API调用)移到诸如resolve之类的东西中。长话短说,是否有一种方法可以将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,即使构造函数先被调用(希望它会产生转换错误)。

0 个答案:

没有答案