Je souhaite utiliser LocalStorageService
dans InterceptedHttp
.
Uncaught Error: Uncaught (in promise): TypeError: Cannot read property 'getItem' of undefined TypeError: Cannot read property 'getItem' of undefined at new InterceptedHttp (http.interceptor.ts:15) at httpFactory (http.factory.ts:6) at _callFactory (core.js:30489) at _createProviderInstance (core.js:30428) at resolveNgModuleDep (core.js:30372) at _createClass (core.js:30462) at _createProviderInstance (core.js:30425) at resolveNgModuleDep (core.js:30372) at NgModuleRef_.get (core.js:31577) at resolveNgModuleDep (core.js:30392) at resolvePromise (zone-evergreen.js:797) at resolvePromise (zone-evergreen.js:754) at zone-evergreen.js:858 at ZoneDelegate.invokeTask (zone-evergreen.js:391) at Object.onInvokeTask (core.js:39679) at ZoneDelegate.invokeTask (zone-evergreen.js:390) at Zone.runTask (zone-evergreen.js:168) at drainMicroTaskQueue (zone-evergreen.js:559)
http.factory.ts J'ai ajouté des services dans des fournisseurs, comme: Comment puis-je utiliser Mise à jour: p> L'erreur que j'obtiens lorsque Aucune erreur autre que celui-ci. Mise à jour 2: providers: [DataEncryptionService, LocalStorageService]
import { XHRBackend, Http, RequestOptions } from "@angular/http";
import { InterceptedHttp } from "./http.interceptor";
import { LocalStorageService } from '../shared/local-storage/local-storage.service';
export function httpFactory(xhrBackend: XHRBackend, requestOptions: RequestOptions, localStorageService: LocalStorageService): Http {
return new InterceptedHttp(xhrBackend, requestOptions, localStorageService);
}
LocalStorageService
dans InterceptedHttp
? this.localStorageService.getItem ("currentUser");
est exécuté: @Injectable()
export class InterceptedHttp extends Http {
currentUser: any;
constructor(backend: ConnectionBackend, defaultOptions: RequestOptions, private localStorageService: LocalStorageService) {
super(backend, defaultOptions);
this.localStorageService.getItem("currentUser"); //this.localStorageService is undefined
}
}
LocalStorageService
n'est pas défini uniquement dans InterceptedHttp
. L'objet LocalStorageService
fonctionne correctement dans une autre classe qui n'est héritée d'aucune classe.
3 Réponses :
On dirait que vous avez manqué la propriété du décorateur: @Injectable ({ providedIn: 'racine', })
Où ajouter cela? et qu'est-ce que cela signifie? veuillez fournir le code complet.
providedIn: 'root'
spécifie qu'Angular doit fournir le service dans l'injecteur racine. providedIn
, qui crée un fournisseur pour le service. Essayez de l'utiliser dans local-storage.service.ts.
@Injectable ({providedIn: 'root',}) classe d'exportation LocalStorageService {constructeur (private dataEncryptionService: DataEncryptionService) {} public getItem (clé: chaîne) {var encryptedData = localStorage.getItem (clé) renvoie this.dataEncryptionService. decryptData (encryptedData); } public setItem (clé: chaîne, données: tout) {var encryptedData = this.dataEncryptionService.encryptData (données); localStorage.setItem (clé, encryptedData); }}
import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root', }) export class YourServiceName { } Refer from this site: https://angular.io/guide/providers
Lors de l'ajout du fournisseur http dans app.module.ts
, je dois ajouter LocalStorageService
dans les dépendances:
providers: [ { provide: Http, useFactory: httpFactory, deps: [XHRBackend, RequestOptions, LocalStorageService], }, ... }
Ajout de LocalStorageService
dans deps
a résolu le problème.
y a-t-il une erreur que vous obtenez?
@HimanshuSingh J'ai ajouté une erreur, veuillez vérifier la question mise à jour.