使用$ state.go和$ urlRouter.sync()在渲染路径之前检查管理组

时间:2016-09-26 18:55:31

标签: angularjs angular-ui-router

我有一个有角度的应用程序。每条路线都有一个必需的用户myApp.config(['$compileProvider', function ($compileProvider) { $compileProvider.debugInfoEnabled(false); }]); 值。该字段是必填字段。

group

或者,对于应该向所有人公开的通用页面:

.state('dogQuery', {
    url:'/dog',
    templateUrl: templatePath + '_DogQuery.html',
    controller: 'DogQueryCtrl',
    controllerAs: 'vm',
    requireADLogin: true,
    group: 'Admin'
})

到目前为止,这是我对如何实际执行这些群组的最佳猜测:

.state('403', {
    url: '/403',
    templateUrl: templatePath + '_403.html',
    controller: 'DashboardCtrl',
    controllerAs: 'vm',
    group: 'None'
});

在检查用户的组时,正在执行的想法暂停每个请求。如果他们在正确的群组中,请通过$rootScope.$on( '$stateChangeStart', function(event, toState, toParams, fromState, fromParams){ event.preventDefault(); if(toState.group === 'Admin') { user.isAdmin().then(function (response) { if (response === true) { $urlRouter.sync(); } else { $state.go("403") } }); } else if(toState.group === 'None'){ $urlRouter.sync(); } else { $state.go("403"); } } ); 将他们带到他们想去的地方。如果用户在右侧组中,请通过$urlRouter.sync()将其转到403页。

不幸的是,写入的代码导致循环。如果用户不是管理员,则会通过$state.go()将其发送到403路由。 403页面触发相同的组检查,但由于它的组要求为“无”,因此触发$state.go()。此时,我假设将把我们带到403,但不,$urlRouter.sync()加载旧的$urlRouter.sync()路由,再次触发403重新路由,并且我陷入了循环。 / p>

要重新说明,有没有办法让/dog更新为$urlRouter.sync()设置当前页面的内容?在这种情况下,我应该使用$state.go()以外的其他内容吗?

谢谢!

0 个答案:

没有答案