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