ui-router:阻止嵌入状态加载

时间:2014-06-05 15:36:14

标签: javascript angularjs angular-ui-router

假设我使用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取消任何嵌套状态的执行?

1 个答案:

答案 0 :(得分:0)

我最后只是把它作为解决方案的要求,以防止父控制器执行..我最初没有走这条路,因为它看起来好像$ state知道参数at那一点(它没有),但我看到我需要的信息可以在$ 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'
    })