Le composant Angular 2 enfant reçoit un événement ancêtre

J'ai un composant Angulaire qui dépend d'un événement de clic qui se produit sur le composant de l'application racine. L'enfant est situé dans des endroits aléatoires dans le composant <app> , donc pourquoi je ne l'ai pas mentionné.

 @Component({ template: '<div>Child!</div>' }) export class Child { constructor () {} } @Component({ selector: 'app', template: '<div (click)=foo()></div>' }) export class App { rootClickEmitter = new EventEmitter(); foo () { this.rootClickEmitter.emit('bar'); } } 

Comment puis-je que le composant enfant reçoive l'événement rootClickEmitter ?

Pour "cliquer à l'extérieur", essayez ceci:

 @Component({ selector: 'child', template: '<div (click)="childClick($event)">child content here</div>', host: { '(document:click)': 'docClick()' } }) export class Child { docClick() { console.log('clicked outside'); } childClick(ev) { console.log('child click'); ev.stopPropagation(); } } 

Plunker

Mise à jour: Eric a simplement posté ce qui suit dans une autre réponse :

"Vous pouvez utiliser listenGlobal qui vous donnera accès au document, au corps, etc.

 renderer.listenGlobal('document', 'click', () => { console.log('Document clicked'); });