Javascript ui路由器:停止加载嵌套状态

Javascript ui路由器:停止加载嵌套状态,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,假设我使用angularjs ui路由器设置了两种状态: .state('branding', { url: "/{branding}", controller: 'BrandingCtrl', templateUrl: '/app/Branding.html' }) .state('branding.index', { url: "/index", controller: 'IndexCtrl', templateUrl: '/app/Index

假设我使用angularjs ui路由器设置了两种状态:

.state('branding', {
    url: "/{branding}",
    controller: 'BrandingCtrl',
    templateUrl: '/app/Branding.html'
})
.state('branding.index', {
    url: "/index",
    controller: 'IndexCtrl',
    templateUrl: '/app/Index.html'
})
在我的BrandingCtrl中,我正在设置页面的详细信息,并验证用户是否有权访问此版本的网站。如果他们没有访问权限,我可以打电话给$state。转到“其他州”并将他们送走

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


如何告诉ui路由器取消任何嵌套状态的执行?

我最后只是将其作为一个解决要求,以防止父控制器也执行。。我最初没有这样做,因为$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'
    })