我知道Angular使用Renderer2
类来操纵我们的视图。它充当了由角度提供的抽象层,允许我们操纵应用程序的元素,而不必直接触摸DOM
。
ElementRef
也是操纵视图的方法,但Angular建议我们不要使用此because of security reasons.现在它正在与渲染器一起使用来像这样操纵DOM
。
import { Directive, ElementRef, HostListener, Renderer2 } from '@angular/core';
@Directive({
selector: '[Randomdirective]'
})
export class Randomdirective{
constructor(private elRef: ElementRef, private renderer: Renderer2) {
}
@HostListener('click')
performTask() {
const li = this.renderer.createElement('li');
const text = this.renderer.createText('Click here to add li');
this.renderer.appendChild(li, text);
this.renderer.appendChild(this.elRef.nativeElement, li);
}
}
我从this source看到使用了渲染器,因为:
这种方法可以更轻松地开发可以在没有DOM访问权限的环境中呈现的应用程序,例如服务器,Web工作者或本机移动设备。
如果我不打算让我的应用程序在没有DOM访问权限的环境中运行,那么直接操作Angular应用程序中的DOM
仍然是一种“不好的做法”吗?
如果是这样,为什么? (例如安全/性能原因?)
答案 0 :(得分:1)
如果你不打算去ssr,那么触摸dom只是不好的做法,因为它不是棱角分明的方式,有比adndchild更好更高效的方式,比如* ngFor ..虽然是棱角分距也有一些卫生条件等