Antwort

1

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.

+0

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. –

+0

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