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

标签 javascript angular

我有一个 Angular 组件,它依赖于发生在根 App 组件上的点击事件。 child 位于 <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');
});

关于javascript - Angular 2子组件接收祖先事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35028267/

相关文章:

javascript - 从两个数组之间的匹配对象复制属性值

javascript - 如何在Javascript中获取旧值和新值?

javascript - json 对象拆分为两个 json 对象

javascript - Promise.all() 返回的结果未捕获作用域变量

angular - 如何延迟 Angular 8 和 rxjs 6 中的 img 显示?

javascript - Angular 2 @Input() 装饰器 : use from typescript

javascript - 如何使用 Angular 7 获取视频元素的播放或单击事件?

jquery - 如何在 Angular 4 中使用 jQuery 插件?

javascript - 我怎样才能用另一个函数包装每个快速路由处理程序

javascript - 如何在 Angular 4 中使用 clearInterval()