angular - @HostBinding() 指令和 ElementRef/Renderer 有什么区别?
问题描述
我正在为下拉切换构建指令。我所看到的是有两种方法来构建这个指令。最佳实践应该是什么?
方法 1 - 使用 @HostBinding()
@HostBinding('class.open') isOpen: boolean = false;
@HostListener('click') toggleFunc(){
this.isOpen = !this.isOpen;
}
方法 2 - 使用 ElementRef 和 Renderer
isOpen: boolean = false;
constructor(private elementRef: ElementRef, private renderer: Renderer2){}
@HostListener('click') onToggle(){
this.isOpen = !this.isOpen;
if(this.isOpen){
this.renderer.addClass(this.elementRef.nativeElement, "open");
}
else{
this.renderer.removeClass(this.elementRef.nativeElement, "open");
}
}
方法 1 看起来更好,因为它只有 3 行代码(无忧)。但最佳实践应该是什么?创建此类指令时我应该使用什么?
是否@HostBinding()
有ElementRef/Renderer
不同的用例?
解决方案
最好使用 @HostBinding() 方法,因为代码看起来比 Renderer2 方法干净得多。
但是,如果您想绕过 Angular 的模板并进行自定义 UI 更改,您应该使用 Renderer2 方法并创建自己的自定义渲染器。https://angular.io/api/core/Renderer2#description
只是不要直接操作 DOM。
推荐阅读
- python - TypeError:“NoneType”对象在 google colab 中不可调用
- ios - 如何在swiftUI中的Foreach循环上显示除一项之外的图像?
- azure-active-directory - 技术查询:某些服务主体功能背后的原因
- java - 在 Android 设备(手机、平板电脑等)上使用 Kiosk 模式
- azure - 从邮递员调用时,后端池中带有 ACI 实例的 Azure 应用程序网关给出“502 Bad Gateway”错误
- python-3.x - django.db.utils.DatabaseError:尝试检索错误 ORA-01804 的文本时出错
- jquery - 如果使用带有 RegEx 的 Jquery 电子邮件无效,则禁用提交按钮
- python-3.x - 无法在 Mac M1 上安装 pandas 和其他 python 库
- r - 如何使用 dplyr 检测字符串中字符的位置
- discord - 当提示“= heist roleid”时,如何让我的机器人向指定的角色 id 授予发送消息权限