【问题标题】:ui-router: Stop Nested State from Loadingui-router:停止加载嵌套状态
【发布时间】:2014-06-06 00:10:51
【问题描述】:

假设我使用 angularjs ui-router 设置了两个状态:

.state('branding', {
    url: "/{branding}",
    controller: 'BrandingCtrl',
    templateUrl: '/app/Branding.html'
})
.state('branding.index', {
    url: "/index",
    controller: 'IndexCtrl',
    templateUrl: '/app/Index.html'
})

在我的BrandingCtrl 中,我正在设置页面的详细信息,并验证用户是否有权访问此版本的站点。如果他们没有访问权限,我可以调用 $state.go('someotherstate') 并将他们送走

如果有人访问 /badbranding/index,BrandingCtrl 将确定用户无权访问并更新状态。但是,IndexCtrl 仍然会执行,即使我已经更改了父控制器中的状态并且它应该不再适用。

如何告诉 ui-router 取消任何嵌套状态的执行?

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    我最终只是将其作为解决要求,以防止父控制器也执行。我最初没有走这条路,因为 $state 似乎并不知道当时的参数(它没有),但我看到我需要的信息在 $stateParams 中可用

    .state('branding', {
            url: "/{branding}",
            resolve: {
                HasAccess: function ($q, $stateParams) {
                    var deferred = $q.defer();
                    var branding = $stateParams.branding;
    
                    if (/*doesn't have access*/)
                        deferred.reject('you do not have access');
                    else
                        deferred.resolve();
    
                    return deferred.promise;
                }
            },
            controller: 'BrandingCtrl',
            templateUrl: '/app/Branding.html'
        })
    

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多