Ho diversi servizi che utilizzano un servizio Web e memorizzano nella cache molti dei risultati. Caching intendo l'archiviazione in una variabile sul servizio. Quando un utente si disconnette, i dati devono essere cancellati. I servizi si presenta come il seguente (versione semplificata):Buone pratiche per la cancellazione dei dati nei servizi al logout in AngularJs
class DataService {
private data;
constructor($http)
{
$http.get(url).then((response) =>
{
this.data = response.data;
});
}
}
Che è dattiloscritto, ma decide di qualcosa di simile:
var DataService = (function() {
function DataService($http) {
var _this = this;
$http.get(url).then(function (response) {
_this.data = response.data;
});
}
return DataService;
})();
ho potuto cancellare i dati utilizzando la risposta in This Question Che sta facendo qualcosa del genere:
$rootScope.on('logout',function(){
this.data = [];
});
Tuttavia, questo è un sacco di codice quando abbiamo più servizi e controller. E sappiamo tutti che questo nuovo tipo aggiungerà alcuni nuovi dati a un servizio e dimenticherà di aggiungerlo alla sequenza di disconnessione. È semplicemente una cattiva pratica.
Analogamente, i dati vengono memorizzati su $ scope in varie parti dell'applicazione e anche questo deve essere cancellato. L'ambito è piuttosto semplice in quanto i costruttori per i controllori vengono caricati in ogni pagina e quindi sostituiscono i dati.
Una soluzione di prova è di effettuare un aggiornamento, tuttavia questo dà esperienze utente orribile.
Una soluzione potrebbe essere quella di far credere angolare che i servizi non siano mai stati creati o ricaricati completamente angolari.
Qual è il modo migliore per farlo? È male memorizzare i dati nelle variabili sui servizi?
Domanda interessante. Sicuramente non * tutti * i tuoi servizi si affidano all'utente connesso? TypeScript potrebbe tornare utile qui. È possibile definire un'interfaccia, ad esempio 'ILoggedInUserService' che espone un metodo' tearDown() '. Ciò costringerebbe lo sviluppatore ad implementare questo metodo per tutti i servizi applicabili. Potresti quindi [enumerare] (http://stackoverflow.com/questions/19411502/angular-get-list-of-all-registered-services) ed eseguire la disconnessione – CodingIntrigue
Mi occupo di ciò trasmettendo un evento e tutto i servizi pertinenti ripuliscono i loro dati ascoltando quell'evento.Questo mantiene il codice pulito senza interdipendenze. – harishr