應用有兩種類型的角色:'adam'和'eve'用戶可以有一個或另一個角色。角度應用授權時多個Ajax調用
角服務來獲取角色:
app.factory("AuthService",function($http, $q){
var user = undefined;
return {
getRoles : function(){
var deferred = $q.defer();
if(user !== undefined){
deferred.resolve(user.auth);
}else{
$http.get("./rest/auth", {
}).then(function(result){
user = result.data;
deferred.resolve(user.auth);
});
}
return deferred.promise;
}
};
});
路由按如下規則進行:
myApp.config(['$routeProvider', function ($routeProvider) {
$routeProvider
.when("/adam", {
templateUrl: 'templates/adam.html',
controller: 'AController'
})
.when("/eve", {
templateUrl: 'templates/eve.html',
controller: 'BController'
})
.when("/", {
resolve: {
load : function($q, $location, AuthService){
var defer = $q.defer();
AuthService.getRoles().then(function(data){
if(data === 'adam'){
$location.path('/adam');
}else{
$location.path('/eve');
}
defer.resolve();
});
return defer.promise;
}
}
})
.otherwise({ redirectTo: '/' });;
}]);
我需要在控制器的角色,以及執行某些操作。控制器代碼:
angular.element(document).ready(function() {
AuthService.getRoles().then(function(data){
// some operation
});
});
在導航到「/」,AJAX調用兩次,因爲兩者的決心和控制器功能調用AuthService.getRoles()。我如何重構代碼,以便只調用一次Ajax?
嗨,我已經更新了我的代碼 – Shohel
如果一個呼叫正在經歷OPTIONS方法和其他使用GET/POST方法,這個問題得到利用下面的代碼解析: $ http.defaults .headers.post [「Content-Type」] =「application/x-www-form-urlencoded」; 您可以嘗試將內容類型替換爲application/json。我不知道它發生的原因。 –