gpt4 book ai didi

javascript - 如何在我的 Angular 应用程序路由启动之前执行 AJAX 请求?

转载 作者:行者123 更新时间:2023-11-29 22:00:28 24 4
gpt4 key购买 nike

在路由启动和路由数据请求解析之前,我需要针对我的 API 执行 AJAX 请求以获取身份验证信息(我使用的是服务器到服务器的 OpenID 身份验证解决方案)。

我目前像这样初始化我的应用程序:

angular.module('mynamespace.admin', [
'ngRoute',
'ui.bootstrap',
'mynamespace.directives',
'mynamespace.filters',
'mynamespace.factories',
'mynamespace.resources',
'mynamespace.admin.templates',
'mynamespace.admin.forms'
]);

angular.module('mynamespace.admin').run(['$rootScope', '$http', 'base64', function($rootScope, $http, base64) {
if (!window.location.origin) {
window.location.origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port: '');
}

// I NEED THIS TO FINISH BEFORE ROUTES RUN AND PERFORM
// HTTP REQUESTS TO RESOLVE DATA
$http.get(window.location.origin + '/account').success(function(accountData) {
$rootScope.accountData = accountData;

// Set up auth headers to be sent with every HTTP request.
$http.defaults.headers.common = { 'Access-Control-Request-Headers': 'accept, origin, authorization' };
$http.defaults.headers.common['Authorization'] = 'Basic ' + base64.encode(accountData.apiKey + ':' + accountData.apiPassword);
});
}]);

angular.module('mynamespace.admin').config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/', { // THIS IS RUNNING BEFORE THE $http REQUEST in .run() finishes
redirectTo: '/forms'
});
}]);

路由在末尾的 .config() 回调中启动。不幸的是,/forms 路由包含带有解析项的路由,在我在 .run() 回调中设置通用 $http header 之前,这些项最终发出 $http 请求。基本上我有一个竞争条件。

因此,我的问题是:如何执行并完成 AJAX 请求并确保它在我的应用程序的路由启动和路由开始发出 AJAX 请求之前返回?

如果这个问题有点不清楚,请您要求澄清,我会澄清。

最佳答案

使用angular的routeChangeStart事件。

var checkAuthentication = function(event, routeChange) {
routeChange.$$route.resolve = {
app: function($q) {
var deferred = $q.defer();
//Authentication({deferred.resolve();})
return deferred.promise;
}
}
}

$rootScope.$on('$routeChangeStart', checkAuthenticationFn);

关于javascript - 如何在我的 Angular 应用程序路由启动之前执行 AJAX 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044774/

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