我是Angular的新手,尝试使用两种选项创建自己的指令:
- 选项1:使用ElementRef直接访问元素
- 选项2:使用Renderer2
选项1:
import { Directive, ElementRef, OnInit } from '@angular/core';
@Directive({
selector: '[appBasicHighlight]'
})
export class BasicHighlightDirective implements OnInit {
constructor(private elementRef: ElementRef) {}
ngOnInit() {
this.elementRef.nativeElement.style.backgroundColor = 'green';
}
}
选项2:
import { Directive, ElementRef, Renderer2, OnInit } from '@angular/core';
@Directive({
selector: '[appBetterHighlight]'
})
export class BetterHighlightDirective {
constructor(private elementRef: ElementRef, private renderer: Renderer2) { }
ngOnInit() {
this.renderer.setStyle(this.elementRef.nativeElement, 'background-color', 'blue');
}
}
教程中的讲师表示,使用 Renderer 比直接访问更安全且更受推荐,但没有明确解释原因。他指的是通过使用 ElementRef 进行直接 DOM 访问,但正如您从代码中看到的那样,Renderer 也使用了 ElementRef。因此,我很困惑 Renderer 相对于 ElementRef 的优势和安全性在哪里。