<router-outlet></router-outlet>
ne peut pas être utilisé pour émettre un événement de l'enfant du composant. Un moyen de communiquer entre les deux composants est d'utiliser un service commun.
Créer un service
de services partagés.ts
import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class SharedService {
// Observable string sources
private emitChangeSource = new Subject<any>();
// Observable string streams
changeEmitted$ = this.emitChangeSource.asObservable();
// Service message commands
emitChange(change: any) {
this.emitChangeSource.next(change);
}
}
Maintenant injecter de l'instance du service ci-dessus dans le constructeur de la société mère et de l'enfant composant.
Le composant enfant sera en émettant un changement à chaque fois que le onClick() la méthode est appelée
enfant.composante.ts
import { Component} from '@angular/core';
@Component({
templateUrl: 'child.html',
styleUrls: ['child.scss']
})
export class ChildComponent {
constructor(
private _sharedService: SharedService
) { }
onClick(){
this._sharedService.emitChange('Data from child');
}
}
Le composant parent doit recevoir ce changement. Pour ce faire,la capture de l'abonnement à l'intérieur de la mère du constructeur.
parent.composante.ts
import { Component} from '@angular/core';
@Component({
templateUrl: 'parent.html',
styleUrls: ['parent.scss']
})
export class ParentComponent {
constructor(
private _sharedService: SharedService
) {
_sharedService.changeEmitted$.subscribe(
text => {
console.log(text);
});
}
}
Espérons que cela aide :)