Dans notre projet Angular 4.3
, nous avons des composants de site public et des composants de site sécurisé (connectés) séparément. Nous utilisons @angular/common/http
. Nous voulons implémenter différents intercepteurs http pour les composants public-site
et les composants secured-site
. Par exemple,Comment utiliser deux instances de HttpClient (une avec 2 intercepteurs et l'autre avec 1 intercepteur) dans Angular 4.3?
- composants publics site - d'appliquer seulement au-dessous intercepteur
LoggingInterceptor
- composants sécurisé site - à appliquer en dessous de deux intercepteurs
LoggingInterceptor
AuthTokenInterceptor
(pour passer le jeton d'authentification en-tête de requête)
Nous avons essayé d'ajouter les détails des fournisseurs HTTP_INTERCEPTORS
à chaque niveau de composant @Component
avec différents intercepteurs. Mais la demande ne va pas dans l'un des intercepteurs.
La demande est en cours d'interception uniquement si nous ajoutons les détails du fournisseur HTTP_INTERCEPTORS
dans @NgModule
. Ici, le problème est, les demandes http du site public vont également dans AuthTokenInterceptor
qui n'est pas nécessaire.
Alors, comment devrions-nous résoudre ce problème? Merci.
Merci @Kuncevic. Nous trouverons la condition pour différencier les requêtes de composants du site public. Mais posez une question, si nous ajoutons le fournisseur HTTP_INTERCEPTORS à un niveau @ Component (retiré de @ NgModule) et si nous faisons des appels http dans la méthode ngOnInit de ce composant, l'intercepteur ne sera pas appelé. Si nous déplaçons les mêmes lignes de code (fournisseur) vers @ NgModule, les intercepteurs fonctionnent. Le fournisseur HTTP_INTERCEPTORS doit-il être configuré uniquement dans NgModule? – Samy
Voilà comment fonctionne l'injection de dépendances. Même si vous mettez vos 'public-site' et' secured-site' à séparer les 'modules', chacun de ces évidemment vous devrez déclarer dans' app.module' et ensuite dire dans 'public-site.module' vous spécifiez 'interceptor1' et dans' secure-site.module' vous spécifiez 'interceptor1' et' interceptor2' de sorte que vous finirez par 'deux appels' interceptor1'. Cependant, si vous faites que chacun de vos modules soit plus lent que vous ne le feriez, car chaque module de chargement paresseux a son propre arbre d'injection, les fournisseurs ne vont pas interférer dans ce cas. – Kuncevic
mais je ne vous recommande pas de résoudre votre problème en utilisant des modules de chargement paresseux comme «chargement paresseux» servant un but différent. Je ne recommanderai pas d'utiliser le «chargement paresseux» juste pour avoir un ensemble différent de 'fournisseurs d'interception '/' provider' pour chacun de vos modules 'lazy laded', j'espère que c'est clair. – Kuncevic