Приложение имеет два типа ролей: "adam" и "eve". Пользователь может иметь одну или другую роль.
Angular для получения ролей:
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 вызывался только один раз?