Что мне нужно, чтобы щелкнуть ссылку на выход,
мы вызываем метод выхода AuthService, чтобы очистить данные cookie, и пользователь должен перенаправить на страницу входа.
Но, похоже, это не работает. страница остается на странице/выхода, а пользователю необходимо обновить страницу, чем она идет на страницу входа/входа. почему так?
вот мой соответствующий код
.state("logout", {
url: '/logout',
data: {
requiresAuth: true
},
controller:['$state', 'AuthService', function($state, AuthService) {
AuthService.logout();
$state.transitionTo('login', null, { reload :true});
}]
})
и здесь применим метод AuthService
app.factory('AuthService', function($log, $http, $q, $cookies){
authService.logout = function () {
var deferred = $q.defer();
$http({
method: "GET",
url: '/app/logout.json'
}).then(function(result) {
$cookies.remove('currentUser');
deferred.resolve(result);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
});
Примечание: когда я пишу/выхожу из URL и ударяю его, он переходит на страницу входа.
Является ли ваш factory
код завершен, как опубликовано? Если да, я боюсь, что у вас синтаксическая ошибка. Это связано с тем, что authService
не будет undefined
.
Вы должны сначала объявить authService
как объект, а затем вернуть этот объект в свою фабричную функцию. В AuthService
ваш сервис AuthService
будет AuthService
при инъекции.
app.factory('AuthService', ['$log', '$http', '$q', '$cookies', function($log, $http, $q, $cookies) {
//declare your authService variable first, as an object.
var authService = {};
//now you are declaring a method inside this object,named logout
authService.logout = function() {
var deferred = $q.defer();
$http({
method: "GET",
url: 'logout.json'
}).then(function(result) {
$cookies.remove('currentUser');
deferred.resolve(result);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
//remember to return this object so that it can be used as a service
return authService;
}])
Я довольно много издевался над примером, который был столь же актуальным, как и ваш код. Он работает нормально. Вот plnkr.
Одно нежное напоминание: на контроллере вашего logout
из logout
вы хотели бы сделать только $state.transitionTo
ПОСЛЕ УСТРАНЕНИЯ AuthService. Что-то вроде этого:
AuthService.logout().then(function() {
$state.transitionTo('login', null, {
reload: true
});
},function(){
//handle error here
})
Я не изменил это в plnkr, так как это ваше приложение, и вы должны четко понимать, чего добиваетесь.
.then
решение работает как шарм
$state.go()
вместо$state.transitionTo()
но безуспешно :(