состояние выхода из углового интерфейса ui-router не будет перенаправлено на страницу входа до обновления страницы

0

Что мне нужно, чтобы щелкнуть ссылку на выход,

мы вызываем метод выхода 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 и ударяю его, он переходит на страницу входа.

  • 0
    Я попытался с $state.go() вместо $state.transitionTo() но безуспешно :(
Теги:
angular-ui-router

1 ответ

1
Лучший ответ

Является ли ваш 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, так как это ваше приложение, и вы должны четко понимать, чего добиваетесь.

  • 0
    Да, я определил authservice и другие методы; только что опубликовал соответствующий код. и спасибо. Вы. .then решение работает как шарм

Ещё вопросы

Сообщество Overcoder
Наверх
Меню