Mam kilka usług, które korzystają z usługi sieciowej i przechowują wiele wyników. Zwykle buforowanie oznacza przechowywanie w zmiennej usługi. Gdy użytkownik się wyloguje, dane powinny zostać wyczyszczone. Służby wygląda następująco (w wersji uproszczonej):Najlepsze praktyki dotyczące czyszczenia danych w usługach podczas wylogowywania w AngularJs
class DataService {
private data;
constructor($http)
{
$http.get(url).then((response) =>
{
this.data = response.data;
});
}
}
Który jest maszynopis, ale postanawia coś takiego:
var DataService = (function() {
function DataService($http) {
var _this = this;
$http.get(url).then(function (response) {
_this.data = response.data;
});
}
return DataService;
})();
mogę usunąć dane za pomocą odpowiedź w dokumencie This Question Które jest wykonywane w następujący sposób:
$rootScope.on('logout',function(){
this.data = [];
});
Jest to jednak dużo kodu, gdy mamy wiele usług i kontrolerów. Wszyscy wiemy, że ten nowy facet doda nowe dane do usługi i zapomni dodać go do sekwencji wylogowania. To po prostu zła praktyka.
Podobnie, dane są przechowywane w $ scope w różnych częściach aplikacji i to również musi zostać wyczyszczone. Zakres jest raczej prosty, ponieważ konstruktorzy dla kontrolerów są ładowani podczas każdej wizyty strony, a następnie zastępują dane.
Jednym z proponowanych rozwiązań jest odświeżenie, jednak daje to straszne wrażenia użytkownika.
Jednym z rozwiązań może być uściślenie, że usługi nigdy nie zostały stworzone lub całkowicie przeładowane kątowo.
Jaki jest najlepszy sposób na zrobienie tego? Czy przechowywanie danych w zmiennych w usługach jest złe?
Interesujące pytanie. Na pewno nie * wszystkie * twoich usług polegają na zalogowanym użytkowniku? Przydałby się tutaj TypeScript. Możesz zdefiniować interfejs, powiedz "ILoggedInUserService", który ujawnia metodę 'tearDown()'. Zmusiłoby to programistę do wdrożenia tej metody dla wszystkich odpowiednich usług. Możesz wtedy [wyliczyć] (http://stackoverflow.com/questions/19411502/angular-get-list-of-all-registered-services) i wykonać przy wylogowaniu – CodingIntrigue
Mam do czynienia z nim przez nadawanie zdarzenia, a wszystkie odpowiednie służby czyszczą swoje dane, słuchając tego wydarzenia.Dzięki temu kod jest zgrabny, bez wzajemnych zależności. – harishr