【发布时间】:2021-09-01 03:48:56
【问题描述】:
我是 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');
}
}
教程中的讲师说它更安全,并建议使用渲染器而不是直接访问,但没有明确解释原因。他的意思是使用 ElementRef 直接访问 DOM,但从代码中可以看出,Renderer 也使用了 ElementRef。有了这个,我对是什么让 Renderer 比 ElementRef 更安全和更有优势感到困惑。
【问题讨论】:
标签: node.js angular typescript ecmascript-6 single-page-application