gpt4 book ai didi

javascript - 无论 Controller 如何,Angularjs 在每个 routeChange 之前运行一个 XHR 请求

转载 作者:行者123 更新时间:2023-11-30 05:45:48 24 4
gpt4 key购买 nike

我正在开发一个新项目,在第一阶段,我想通过向/api/me 发送 XHR HEAD 请求来检查用户是否与服务器进行了 session 。

我想使用下面的语法

$rootScope.$on("$routeChangeStart", function(event, current, previous, rejection){/*...*/})

问题是我不想为每个 Controller 重写这段代码,有没有办法以通用的方式做到这一点?,.run?,服务(工厂),哪种方式是正确的?

请提供一个简短的代码示例,因为我是这个框架的新手。

var app = angular.module('home', []);
var httpConfig = {withCredentials: true};
app.config(function($routeProvider){
$routeProvider.
when('/',
{
template: 'views/home.html',
controller: homeCtrl
}).
when('/login',
{
template: 'views/login.html',
controller: loginCtrl
}).
when('/logout',
{
template: 'views/logout.html',
controller: logoutCtrl

}).
otherwise(
{
template: 'views/home.html',
controller: homeCtrl
})
}).
run(function($rootScope, authUser){
$rootScope.$on('$routeChangeStart', function () {
authUser($rootScope);
})
}).
factory('authUser', function($http, httpConfig){
var promise = $http.head('/users/me', httpConfig);
})

最佳答案

您可以尝试使用 $routeProvider 解析如下:

app.config(function($routeProvider){
$routeProvider.
when('/',
{
template: 'views/home.html',
controller: homeCtrl,
resolve:{auth:"authUser"}
}).
when('/login',
{
template: 'views/login.html',
controller: loginCtrl ,
resolve:{auth:"authUser"}
}).
when('/logout',
{
template: 'views/logout.html',
controller: logoutCtrl,
resolve:{auth:"authUser"}

})

此外,您可能需要更改工厂函数以返回 promise :

app.factory('authUser', function($http, httpConfig){
return $http.head('/users/me', httpConfig);
})

关于javascript - 无论 Controller 如何,Angularjs 在每个 routeChange 之前运行一个 XHR 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18041440/

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