在Angular2的指令或组件中将@HostBinding和@HostListener作为条件

Lee*_*Lee 5 angular2-directives angular2-components angular

我有一个接受事件的指令:

<td calendarEvent [event]=event><td>

在指令中,我具有HostBinding用于根据事件添加类的,以及HostListener用于侦听mouseentermouseleave事件的。例如:

@HostBinding('class.all-day') get eventIsAllDay() {
  if (this.event) return this.event.is_all_day;
}
Run Code Online (Sandbox Code Playgroud)

许多<td>旨意具有undefined[event]输入。有没有一种方式HostBinding,并HostListener根据条件将被添加?在每次更改检测中,它都必须为每个<td>标签运行所有绑定和侦听器,即使没有事件也是如此。也许所需的计算能力可以忽略不计,但是我敢肯定一点点帮助,特别是对于移动设备。

Gün*_*uer 4

无法有条件地添加这些。

您可以使用属性并绑定到该属性。使用属性进行更改检测比使用函数或 getter 更有效。

@HostBinding('class.all-day') 
eventIsAllDay:boolean = false;

set event(val) {
  this.event.is_all_day === val;
}
Run Code Online (Sandbox Code Playgroud)

  • 我知道这是一个旧答案,但您可以使用“Renderer2”来“按需”收听某些内容。有关该主题的更多信息,请参阅此处的我的评论:https://github.com/angular/angular/issues/7626#issuecomment-611991619 (2认同)