Javascript ui路由器:停止加载嵌套状态
假设我使用angularjs 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
.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'
})