einen guten Weg zu machen, ist localStorage
eine injizierbare zu machen und verschiedene Implementierungen für diese Entscheidung.
Eine abstrakte Klasse, die Storage
API als Zeichen verwendet werden können, reflektiert:
export abstract class LocalStorage {
readonly length: number;
abstract clear(): void;
abstract getItem(key: string): string | null;
abstract key(index: number): string | null;
abstract removeItem(key: string): void;
abstract setItem(key: string, data: string): void;
[key: string]: any;
[index: number]: string;
}
App-Modul dann für Browser ist es
export function localStorageFactory() {
return localStorage;
}
...
{ provide: LocalStorage, useFactory: localStorageFactory }
Und für Server App-Modul localStorage
kann mit einiger Implementierung ersetzt werden , wie node-storage-shim
für In-Memory-Speicher:
{ provide: LocalStorage, useClass: StorageShim }
Die Verwendung von DI statt des globalen persistenten Speichers erleichtert auch das Testen.
Danke estus, Jetzt habe ich nur eine Arbeit mit platformID erstellt, da ich nicht viel von Daten nur ein Token gespeichert habe. Ich werde diese Lösung auch versuchen. –
Ja, ein Provider ist nur ein sauberer Weg, dies zu tun. Natürlich kann platformID im Provider verwendet werden, aber dies führt dazu, dass StorageShim im Browser-Bundle enthalten ist, wo Sie es nicht benötigen. – estus