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.