【问题标题】:angular ui-router resolve if params set如果设置了参数,则角度 ui-router 解析
【发布时间】:2017-01-05 21:12:37
【问题描述】:

如果没有参数发送,我想通过重定向用户来保护我的路由访问。 以防止直接 url 访问。 我可以在我的控制器中做到这一点,但我有一些网络服务调用。 如果参数不存在,目标是不调用解析。 这是我的状态:

.state('parent.step2', {
    url: '/step2',
    templateUrl: 'app/template/step2.html',
    controller: 'Step2Controller',
    controllerAs: 'step2',
    params: {name: null},
    data : {
        step: 2
    },
    resolve: {
        data1: ['Data1', function(Data1) {
            return Data1.query().$promise;
        }],
        data2: ['Data2', '$stateParams', function(Data2, $stateParams) {
            return Data2.query({name: $stateParams.name}).$promise;
        }],
        data3: ['Data3', function(Data3) {
            return Data3.query().$promise;
        }]
    }
})

【问题讨论】:

  • 只需在data2 resolve 中添加一个简单的if 语句来检查$stateParams 是否包含所需的参数,如果没有,则使用$q.reject() 返回拒绝(添加$q服务到函数注入)
  • 为什么不对可能重定向到登录页面的所有响应错误(代码 401)进行拦截服务?

标签: angularjs angular-ui-router


【解决方案1】:

我会在$stateChangeStart 事件上设置一个监听器:

$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams){
    if ((!toState.data.step) && ($state.current.name === 'parent.step2')) {
        $state.go('error');
    }
  })

【讨论】:

  • 谢谢,我只是添加到添加 event.preventDefault();在重定向之前将“$state.current.name”更改为“toState.name”
猜你喜欢
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2013-10-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多