Aplikacja ma dwa rodzaje ról: "adam" i "eve" Użytkownik może mieć jedną lub drugą rolę.Kilka połączeń Ajax podczas autoryzacji aplikacji kątowej
kątowa usługa dostać role:
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;
}
};
});
Routing odbywa się w następujący sposób:
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: '/' });;
}]);
Muszę dostać role w sterowniku, jak również do wykonywania niektórych operacji. Kod Kontroler:
angular.element(document).ready(function() {
AuthService.getRoles().then(function(data){
// some operation
});
});
Na przechodząc do '/', ajax nazywa się dwa razy, ponieważ zarówno funkcja resolve i kontroler wzywa AuthService.getRoles(). Jak mogę zrestrukturyzować kod tak, aby ajax był wywoływany tylko raz?
Witam, mam zaktualizowany mój kod – Shohel
Jeśli jedno połączenie przechodzi metody opcji i innych za pomocą metody GET/POST, problem zostanie rozwiązany za pomocą następującego kodu: $ http.defaults .headers.post ["Content-Type"] = "application/x-www-form-urlencoded"; Możesz spróbować zastąpić typ zawartości jako aplikację/json. Nie wiem, dlaczego tak się dzieje. –