【问题标题】:AngularJS ui-router, how to get the name of the targeted state in the resolve object of an abstract partent state?AngularJS ui-router,如何在抽象部分状态的解析对象中获取目标状态的名称?
【发布时间】:2020-03-16 23:29:16
【问题描述】:

我正在使用 ui-router,我有子状态和抽象状态 - 父状态。

现在,我希望能够进行一些用户角色管理,并且我想在一个地方为所有根进行。

最好的办法是在父状态下解析对象.$stateProvider

在这里,我这样做是为了管理应用宽度身份验证数据。

问题是,我如何从抽象状态的解析函数中得到目标状态?

    .state('section', {
        abstract: true,
        template: '<ui-view/>',
        resolve: {

            // Auth & role management middleware.
            UserData: ['$q', '$stateParams', 'Session', function ($q, $stateParams, Session) {

                // HOW DO I GET THE DESTINATION ROUTE HERE.
                $state.current.name - returns null
                $stateParams  - is an empty object.
                // ANY IDEAS?

                var userData;
                userData = Session.getUserData();
                if (userData.token) {
                    return userData;
                }
                return $q.reject('login');
            }]
        }
    });

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    内部解析时状态尚未更新。

    到目前为止,我的解决方法是收听“$stateChangeStart”事件

    $rootScope.$on('$stateChangeStart', callback)

    此事件在解析之前发出,传递给回调的第二个参数是toState,其中包含您需要的信息。

    你可以把这个逻辑放到你的Session service

    【讨论】:

    • 从架构和未来兼容性的角度来看,这不是最好的想法,但由于缺乏其他替代方案,这是一个很好的解决方法!谢谢)
    【解决方案2】:

    我知道这是这么旧的,但使用$state.next.name 来获取目标状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多