在每次更改路线时,我都需要检查用户是否已登录。如果没有,我需要将用户重定向到登录页面,否则显示该页面。
我有一个 ng-view 的父控制器:
<body ng-controller="init">
<div ng=view=""></div>
</body>
因为我需要检查用户是否登录all the the route changes, I needed to add the check globally.
因此,我尝试在 init 控制器中添加检查,例如:
$scope.$on('$locationChangeStart',function(event, newUrl, oldUrl) {
CheckSession.get(function(data) {
//user is logged in thus let the user continue
},function(data) {
//user is logged out
$location.path('login');
});
};
这种方法的问题在于:
当路由发生变化时,页面加载1-2秒,因为此时还没有收到ajax调用成功,js不等待ajax调用响应。然后,当它被接收到并且失败时,页面将重定向到登录。
此外,我无法添加event.preventdefault()
$locationChangeStart 的开头,因为它会在无限循环中发送整个站点。
我需要:
- 一些方法可以阻止位置更改,直到没有收到 ajax 调用响应。
- 某种方式可以将此检查添加到所有位置更改,而无需手动将解析添加到 app.js 中 routeProvider 中的每个 $route。