Angular Renderer2操作代码示例

作者:技术拾光

时间:2026-06-12

浏览:493

Renderer2 类 Renderer2 是 Angular 框架中一个核心的抽象服务,它充当了开发者与 DOM 之间的“中间人”,允许在不直接操控 DOM 的前提下,对应用界面元素进行管理。Angular 官方推荐使用这一方式,因为它能提升应用在不同环境下的兼容性,例如服务端渲染(Server-

文章目录

Renderer2 类

Renderer2 是 Angular 框架中一个核心的抽象服务,它充当了开发者与 DOM 之间的“中间人”,允许在不直接操控 DOM 的前提下,对应用界面元素进行管理。Angular 官方推荐使用这一方式,因为它能提升应用在不同环境下的兼容性,例如服务端渲染(Server-Side Rendering)、Web Worker 以及原生移动端场景。采用 Renderer2 可让代码更加通用和健壮,避免直接操作 DOM 带来的平台依赖问题。

Angular Renderer2操作代码示例

基本用法

在实际开发中,Renderer2 最常应用于自定义指令。Angular 指令本身是为元素逻辑修改而设计,因此两者结合十分自然。以下是一个基础示例:通过 addClass 方法,为宿主元素添加一个名为 wild 的 CSS 类。

import { Directive, Renderer2, ElementRef, OnInit } from '@angular/core';

@Directive({
  selector: '[appGoWild]'
})
export class GoWildDirective implements OnInit {
  constructor(private renderer: Renderer2, private el: ElementRef) {}

  ngOnInit() {
    this.renderer.addClass(this.el.nativeElement, 'wild');
  }
}

在模板中为目标元素应用该指令后,渲染时会自动添加 wild 类:

Hello World!

总体而言,使用 Renderer2 并不比直接操作 DOM 更加复杂,且逻辑更清晰。下面将介绍几个常用的方法。

createElement / appendChild / createText

这三个方法协同工作,用于创建并挂载新 DOM 元素。以下示例先创建一个 div 和一个文本节点,将文本节点放入 div,再将 div 附加到指令对应的宿主元素下:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  const div = this.renderer.createElement('div');
  const text = this.renderer.createText('Hello world!');

  this.renderer.appendChild(div, text);
  this.renderer.appendChild(this.el.nativeElement, div);
}

如果指令作用于一个 article 元素,渲染后的 DOM 结构如下:

Hello world!

setAttribute / removeAttribute

属性操作同样是常见需求。调用 setAttribute 或 removeAttribute,并传入元素引用及属性名即可:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.setAttribute(this.el.nativeElement, 'aria-hidden', 'true');
}

addClass / removeClass

添加类名的方式已在上文演示。移除类名同样简单,仅需替换方法名:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.addClass(this.el.nativeElement, 'wild');
}

对应 removeClass 的用法与之对称:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.removeClass(this.el.nativeElement, 'wild');
}

setStyle / removeStyle

利用 Renderer2 添加内联样式十分直接。例如为元素设置左侧虚线边框:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.setStyle(
    this.el.nativeElement,
    'border-left',
    '2px dashed olive'
  );
}

同样,removeStyle 可清除该样式:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.removeStyle(this.el.nativeElement, 'border-left');
}

setProperty

此方法用于设置元素的对象属性。例如为图片元素设置 alt 属性:

constructor(private renderer: Renderer2, private el: ElementRef) {}

ngOnInit() {
  this.renderer.setProperty(this.el.nativeElement, 'alt', 'Cute alligator');
}

或者为输入框设置 value:

// ...

ngOnInit() {
  this.renderer.setProperty(this.el.nativeElement, 'value', 'Cute alligator');
}

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章