angular - 在angular2的@contentChild中检测焦点事件的最佳方法是什么?

标签 angular

假设我在 ng-content 标签之间有一个预计的原生输入。 我知道,我可以使用@ContentChild 获取对预计输入的引用。 我想知道我怎么能检测到例如父组件中投影输入元素的焦点事件?

最佳答案

没有办法。 focus事件不会冒泡,因此需要直接在元素上监听。

如果您可以使用@ContentChild() 获取引用,您可以使用

constructor(private renderer:Renderer) {}

someMethod() {
  this.renderer.invokeElementMethod(
    this.focusableChild.nativeElement, 
    'addEventListener', ['focus', onFocus.bind(this)]
  ); 
}

如果您控制组件的使用方式,您可以将指令应用于您的内容,如 How to realize website with hundreds of pages in Angular2 中所述。通过调度父元素可以收听的自定义事件将 focus 事件转发到冒泡事件

@Component({
  template: `... <ng-content></ng-content>
  ...
})
class MyComponent {
  @HostBinding('custom-focus', ['$event'])
  onFocus(event) {
    ...
  }
}

关于angular - 在angular2的@contentChild中检测焦点事件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37746058/

相关文章:

javascript - 从 Angular 外部设置 Angular 组件的属性

angular - Azure 静态网站未显示更改后的更新?

Angular 为 :host in ngOnInit 设置 css 样式

angular - RxJS -BehaviorSubject,onComplete 未调用

angular - 集成 Angular 2 和 .NET Core Web API 的最佳方式?

Angular 6 - i18n 与 ngx-translate

Angular Material - 设置调色板

angular - 类型 'provideStore' 上不存在属性 'typeof StoreModule'

html - 错误 TS2322 : Type 'Event' is not assignable to type 'boolean'

cordova - 如何向 ionic 推送通知添加操作按钮?