我是一个 Angular 新手。我正在尝试在任何页面上编写一个 Angular 服务,它将检查用户是否已登录,如果没有,则将它们转发到登录页面,并将其当前路径作为 GET 参数传递。
我快到了,但它不是很有效。我遇到的问题如下:如果用户去#/articles/my-articles/,他们会被转发到#/login/?next=%2Farticles%2F:module%2F。
换句话说,看起来 Angular 传递的是路由模式,而不是实际的 URL。
这是我的验证码:
auth.run(['$rootScope', '$location', '$user', 'TOKEN_AUTH', 'PROJECT_SETTINGS', function ($rootScope, $location, $user, TOKEN_AUTH, PROJECT_SETTINGS) {
var MODULE_SETTINGS = angular.extend({}, TOKEN_AUTH, PROJECT_SETTINGS.TOKEN_AUTH);
$rootScope.$on('$routeChangeStart', function (e, next, current) {
if (next.$$route && !next.$$route.anonymous && !$user.authenticated) {
var nextParam = next.$$route.originalPath;
$location.url(MODULE_SETTINGS.LOGIN + '?next=' + nextParam);
}
});
}]);
我可以使用 hacky 方式获得原始路径current.params.module- 但这对我没有帮助,因为它似乎routeChangeStart被触发了几次,并且current除了最后一次火灾之外,对象在所有情况下都是未定义的。
这是我的路线文件:
articles.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when('/articles/:module/', {
templateUrl: 'views/articles/article_list.html',
controller: 'ArticlesListCtrl'
})
.when('/articles/:module/:id/', {
templateUrl: 'views/articles/article_detail.html',
controller: 'ArticlesDetailCtrl'
});
}]);
我该如何解决这个问题?