Angular 2子组件接收祖先事件

时间:2016-01-27 03:23:10

标签: javascript angular

我有一个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事件?

1 个答案:

答案 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();
  }
}

Plunker

更新:Eric刚刚在another answer中发布了以下内容:

&#34;您可以使用listenGlobal来访问文档,正文等。

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