Je veux injecter le routeur angulaire dans mon httpterceptor. Malheureusement, l'erreur suivante est lancée dans la console du navigateur:
typeError: cela.Router est indéfini p> blockQuote>
J'ai ajouté ceci à mon constructeur comme d'habitude: p>
xxx pré> En outre, j'ai fait ce qui suit dans mon tableau de fournisseurs à l'intérieur de l'app.Module.ts : p>
xxx pré> Je souhaite utiliser l'URL actuelle à l'intérieur d'une instruction IF dans mon gestionnaire d'erreur pour fournir des fonctionnalités spécifiques pour différents itinéraires: P>
myErrorHandler(error: HttpErrorResponse) { if (this.router.url === 'test') { // do something } else { return throwError(error).pipe( // do something ); } }
3 Réponses :
Avez-vous fait cela? Trop évident?
Bien sûr :) Je pense qu'il y a quelque chose de spécial avec les intercepteurs mais je ne trouve rien dans les documents.
Vous pouvez essayer d'utiliser l'injecteur.
constructor(inj: Injector) { this.router = inj.get(AuthService) }
J'ai trouvé la réponse d'un autre sujet pertinent: Angulaire 6 Le service est indéfini après l'injection d'intercepteur
Fondamentalement, la variable de constructeur injecté n'est pas disponible dans la fonction que vous passez à la fonction CatchError code>. Vous devez accéder au routeur
directement dans votre méthode Â'intercept 'comme ceci: p>
catchError(this.handleError) // does not work because of different scope
catchError(err => this.handleError(err)) // works because of same scope
Cela m'a sauvé du mal de tête.
Pouvez-vous donner plus de contexte? Le code dans la question a l'air bien.
@Lemon j'ai mis à jour ma question. Je veux obtenir la route actuelle (URL) dans mon intercepteur et l'utiliser dans un gestionnaire d'erreurs.
@ CodeHan25 Avez-vous réussi à résoudre ce problème? Je rencontre le même problème avec la même configuration.