微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – Angular 2子组件接收祖先事件

我有一个Angular组件,它依赖于根App组件上发生的单击事件.孩子位于< 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事件?

解决方法:

对于“单击外部”,请尝试以下操作:

@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发布了以下内容

“你可以使用listenGlobal来访问文档,正文等.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐