Je souhaite créer un type d'intercepteur pour le gestionnaire d'erreurs. Voilà pourquoi je crée les fichiers:Angular ne voit pas le service injecté
ErrorService:
import { Injectable } from '@angular/core';
@Injectable()
export class ErrorService {
name : any;
constructor() {
}
setName(message:string){
this.name = message;
}
getName(){
return this.name;
}
error(detail: string, summary?: string): void {
this.name = detail;
}
}
AppErrorHandler:
import { ErrorService } from './error-service';
import { ErrorHandler, Inject } from '@angular/core';
export class AppErrorHandler implements ErrorHandler {
constructor(@Inject(ErrorService) private errorService: ErrorService){
}
handleError(error : any){
this.errorService.setName(error.status);
console.log('getter', this.errorService.getName());
console.log('test error ', error);
}
}
Pour que tout point GOES assez bon. Lorsque j'imprime une erreur dans handleError
, il s'imprime correctement.
Mais quand je veux passer l'objet ErrorService
dans le ErrorComponent
soudainement Angulas ne peut pas le voir.
ErrorComponent:
import { ErrorService } from './../common/error-service';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'error',
templateUrl: './error.component.html',
styleUrls: ['./error.component.css']
})
export class ErrorComponent implements OnInit {
constructor(private errorService: ErrorService) {
console.log('from ErrorComponent, ', this.errorService);
}
message = this.errorService.getName();
ngOnInit() {
}
}
Et ErrorComponent.html
<div class="alert alert-danger">
Error!!! {{message}}
</div>
Bien sûr, j'ai ajouté quelques importations app.module
:
import { ErrorComponent } from './error/error.component';
@NgModule({
declarations: [
...
ErrorComponent
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
HttpModule
],
providers: [
PostService,
ErrorService,
{provide: ErrorHandler, useClass: AppErrorHandler}
],
bootstrap: [AppComponent]
})
export class AppModule { }
Le problème est que dans AppErrorHandler
je suis passer l'erreur à ErrorService
et je veux afficher dans ErrorComponent
mais ErrorComponent
ne voit pas les données transmises
MISE À JOUR: J'ai suivi la solution ci-dessous et obtenir une erreur. Mon errorComponent
ressemble:
import { ErrorService } from './../common/error-service';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'error',
templateUrl: './error.component.html',
styleUrls: ['./error.component.css']
})
export class ErrorComponent implements OnInit {
errorService: ErrorService;
message: string;
constructor(errorService: ErrorService) {
this.errorService = errorService;
console.log('------ from error component ', errorService.name, this.errorService);
}
ngOnInit() {
}
}
Et le fichier html
:
<div class="alert alert-danger">
Error!!! {{errorService.name}}
</div>
Et le problème est que je ne peux pas réellement imprimer la propriété de nom dans le navigateur. Dans la console chrome je:
de sorte que vous pouvez voir que je peux easliy obtenir tout l'objet ErrorService mais n'a pas pu obtenir le nom de la propriété qui console est undefined
- pourquoi? Et à cause de cela, je ne peux pas l'afficher correctement.
où est le problème ?? quel genre d'erreur obtenez-vous? –
N'utilisez pas @ Inject lors de l'injection de ErrorService dans AppErrorHandler. @Inject est pour les valeurs/types primitifs. Faites juste 'constructor (private errorService: ErrorService) {}'. Voyez si cela fait une différence. –
Le problème est que dans 'AppErrorHandler' je passe l'erreur à' ErrorService' et je veux l'afficher dans 'ErrorComponent' mais' ErrorComponent' ne voit pas les données passées – bielas