我的问题实际上与此处发现的问题非常相似:
简而言之,我正在使用 $routeChangeStart 并尝试使用 $location 更改当前路线。当我这样做时,控制台向我显示原始页面仍在加载并很快被新页面覆盖。
提供的解决方案是使用 $locationChangeStart 而不是 $routeChangeStart,这应该可以防止额外的重定向。不幸的是,我在 $routeprovider 中使用了我在更改路由时需要访问的其他数据(我用它来跟踪页面限制)。这是一个例子......
$routeProvider.
when('/login', { controller: 'LoginCtrl', templateUrl: '/app/partial/login.html', access: false}).
when('/home', { controller: 'HomeCtrl', templateUrl: '/app/partial/home.html', access: true}).
otherwise({ redirectTo: '/login' });
$rootScope.$on('$routeChangeStart', function(event, next, current) {
if(next.access){
//Do Stuff
}
else{
$location.path("/login");
//This will load the current route first (ie: '/home'), and then
//redirect the user to the correct 'login' route.
}
});
使用 $routeChangeStart,我可以使用“下一个”和“当前”参数(参见AngularJS - $route)作为对象来检索我的“访问”值。使用 $locationChangeStart,这两个参数返回 url 字符串,而不是对象。所以似乎没有办法检索我的“访问”值。
有什么方法可以将 $locationChangeStart 的重定向停止功能与 $routeChangeStart 的对象灵活性相结合来实现我的需要?