gpt4 book ai didi

javascript - AngularJS |在加载之前处理路由

转载 作者:行者123 更新时间:2023-12-03 05:06:09 26 4
gpt4 key购买 nike

我希望通过外部服务为我的路由创建简单的身份验证检查。

我定义了路由对象的访问要求:

$routeProvider
.when('/', {
templateUrl: 'src/app/views/index.html',
controller: 'indexCtrl',
authenticated: true
})
.when('/login', {
templateUrl: 'src/app/views/login.html',
controller: 'loginCtrl',
anonymous: true
})
.otherwise({
redirectTo: '/'
})
;

然后,我检查我是否拥有 $routeChangeStart 事件中的权限。

$rootScope.$on('$routeChangeStart', function (event, next) {
if(next.authenticated && !$myService.isLoggedin())
$location.path("/login");
else if(next.anonymous && $myService.isLoggedin())
$location.path("/secured");
});

事实上,它确实有效-
如果用户未经过身份验证,则会将其移动到登录页面,如果他已通过身份验证,但该路线仅适用于匿名用户,则会将其移动到另一个页面,等等。

但是 - 这个重定向实际上是在 Controller 和模板加载之后发生的!它会导致我的 Controller 对我的 REST API 执行一些不必要的请求,即使我没有经过身份验证。

在处理之前我如何处理路由?

最佳答案

使用$routeProvider resolve

.when('/', {
templateUrl: 'src/app/views/index.html',
controller: 'indexCtrl',
resolve: function($q, $location) {
var deferred = $q.defer();
deferred.resolve();
if (!isAuthenticated) {
$location.path('/login');
}

return deferred.promise;
}
})

关于javascript - AngularJS |在加载之前处理路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18788586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com