我有一个Angular组件,它依赖于根App组件上发生的click事件。孩子位于<app>
组件内的随机位置,因此我没有列出它。
@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');
}
}
如何让子组件收到rootClickEmitter
事件?
答案 0 :(得分:2)
对于&#34;点击外面&#34;,试试这个:
@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();
}
}
更新:Eric刚刚在another answer中发布了以下内容:
&#34;您可以使用listenGlobal来访问文档,正文等。
renderer.listenGlobal('document', 'click', () => {
console.log('Document clicked');
});