Renderer2 Angular必要吗?

时间:2018-02-17 19:59:06

标签: javascript angular typescript

我知道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仍然是一种“不好的做法”吗?

如果是这样,为什么? (例如安全/性能原因?)

1 个答案:

答案 0 :(得分:1)

如果你不打算去ssr,那么触摸dom只是不好的做法,因为它不是棱角分明的方式,有比adndchild更好更高效的方式,比如* ngFor ..虽然是棱角分距也有一些卫生条件等