0
votes

Comment ajouter une dépendance au service étendu dans angular8

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)

providers: [DataEncryptionService, LocalStorageService]

http.factory.ts

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);
}

J'ai ajouté des services dans des fournisseurs, comme:

XXX

Comment puis-je utiliser LocalStorageService dans InterceptedHttp?

Mise à jour: p>

L'erreur que j'obtiens lorsque 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
    }
}

Aucune erreur autre que celui-ci.

Mise à jour 2:

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.


2 commentaires

y a-t-il une erreur que vous obtenez?


@HimanshuSingh J'ai ajouté une erreur, veuillez vérifier la question mise à jour.


3 Réponses :


0
votes

On dirait que vous avez manqué la propriété du décorateur: @Injectable ({ providedIn: 'racine', })


3 commentaires

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); }}



0
votes
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root',
})
export class YourServiceName {
}
Refer from this site: https://angular.io/guide/providers

0 commentaires

0
votes

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.


0 commentaires