我有一个angular应用程序。我正在使用ui-router管理我的状态。我需要调用一个通用的API来检查是否允许用户查看网页。有没有一个通用的地方,在那里我可以调用API,然后才能进入用户请求的状态?
在我当前的实现中,视图部分显示,然后重新路由发生。
//app.js
$rootScope.$on('$stateChangeSuccess', function(evt, toState) {
if(toState.name === 'login' || toState.name === 'payment')
return;
userService.isBillingCleared().then(function() {
//redirect to toState
}, function() {
$state.go('payment');
});
});
我如何防止这种情况发生?
发布于 2016-04-13 15:46:58
请尝试以下操作
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options) {
if(toState.name === 'login' || toState.name === 'payment')
return;
event.preventDefault(); // prevent the state change
userService.isBillingCleared().then(function() {
$state.go(toState.name); // do the state change manually if allowed
}, function() {
$state.go('payment');
});
}));
发布于 2016-04-13 16:02:03
尝试这个链接,它讨论ui-router中的路由的authentication。看起来这对你来说是一个很好的解决方案。
发布于 2016-07-18 16:59:21
我在开发系统时遇到了类似的问题,唯一的区别是我使用的是angular提供的默认路由器,但显然这不会造成任何问题。
在检查用户的身份验证级别之前将数据隐藏起来,并指示集中整个过程。让我们这样想象一下--你将要显示给用户的视图是隐藏的,除非检查了细节,在那之前,你可以给他们显示任何你想要的预加载器或者其他任何动画。
这是人们在使用web应用程序或任何移动应用程序时通常会做的事情,阻塞数据,除非您确定数据已经准备好可以查看。
即使在页面加载后加载数据的用例中,这种做法也很有用,例如,假设我向用户显示事务,但事务仅在用户调用视图后加载,因此当调用视图时,会调用后端,这意味着用户只能看到一瞬间-一个空表。So...just使用预加载器,首先调用函数,然后让用户看到表。
https://stackoverflow.com/questions/36591629
复制相似问题