Рекомендации по очистке данных в службах при выходе из системы в AngularJs

У меня есть несколько сервисов, которые используют веб-сервис и кэшируют множество результатов. Кэширование я подразумеваю хранение в переменной в службе. Когда пользователь выходит из системы, данные должны быть очищены. Услуги выглядят следующим образом (упрощенная версия):

class DataService   {

  private data;

  constructor($http)
  {
     $http.get(url).then((response) => 
       { 
          this.data = response.data;
       });
  }

}

Что такое typescript, но разрешается примерно так:

var DataService = (function () {
    function DataService($http) {
        var _this = this;
        $http.get(url).then(function (response) {
            _this.data = response.data;
        });
    }
    return DataService;
})();

Я могу очистить данные, используя ответ в Этот вопрос Что делает что-то вроде этого:

$rootScope.on('logout',function(){
  this.data = [];
});

Однако, это много кода, когда у нас есть несколько служб и контроллеров. И все мы знаем, что этот новый парень добавит некоторые новые данные в сервис, и он забывает добавить его в последовательность выхода. Это просто плохая практика.

Аналогично, данные хранятся в $scope в разных частях приложения, и это также должно быть очищено. Область действия довольно проста, поскольку конструкторы для контроллеров загружаются при каждом посещении страниц и затем переопределяют данные.

Одним из предлагаемых решений является обновление, однако это дает ужасные пользовательские впечатления.

Одним из решений может быть сделать, что angular считает, что службы никогда не были созданы или не перезагрузили angular полностью.

Каков наилучший способ сделать это? Плохо хранить данные в переменных по сервисам?

Ответ 1

Вы можете создать службу, которая отвечает за очистку всех данных от других служб. В этом случае вам нужно только вызвать метод "clear" этой службы и реализовать отдельные ясные вызовы внутри этого (так только один раз).

Это дает вам также преимущество в том, что у вас есть обзор того, какие данные служб нужно очищать все время, поскольку в будущем вы можете иметь исключения.

Также см. этот ответ для справки: Внедрение услуги в другую службу в angularJS

Ответ 2

вы можете использовать обновление полной страницы:

$window.location.reload();

это перезапустит все состояние вашего приложения

другим решением может быть хранение всего в хранилище сеансов, а затем очистка его при выходе из системы:

sessionStorage.clear();