如何在ElementRef(nativeEelement)中设置HTML内容?
How to set HTML content in the ElementRef (nativeEelement)?
我想用指令设置 HTML 元素的内容。
export class AdvertisementDirective {
constructor(el: ElementRef) {
el.nativeElement.style.background = 'yellow';
el.nativeElement.content = '<p>Hello World<p>';
}
}
但是它不起作用,也没有给出任何错误。
这样做的想法是在指令中包含广告代码,并在我使用指令属性的任何地方设置它。广告代码包含JavaScript
和HTML代码。
刚刚用以下方法修复了它:
el.nativeElement.innerHTML = '<p>Hello World<p>';
我意识到 nativeElement
应该接受所有 JavaScript
方法,因为它是原生 HTML 元素。
DOM 通过直接更改 nativeElement
上的属性进行操作不被认为是一种好的做法。它在某些情况下也不会工作,例如使用 Angular Universal 的 Web Workers 和服务器端渲染。
更安全的方法是使用 Renderer2
.
import { ..., AfterViewInit, ElementRef, ViewChild, Renderer2, ... } from '@angular/core';
...
export class AdvertisementDirective implements AfterViewInit {
@ViewChild('templateRefName') el: ElementRef;
constructor(
private renderer: Renderer2
) {
}
ngAfterViewInit() {
this.renderer.setStyle(this.el.nativeElement, 'background', 'yellow');
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '<p>Hello World<p>');
}
}
并在模板中:
<div #templateRefName></div>
附加文本也可以通过使用 renderer2 对象的 createText 属性 来实现。
import {ElementRef, ViewChild, Renderer2} from '@angular/core';
export class AdvertisementDirective {
@ViewChild('templateRefName') el: ElementRef;
constructor(
private renderer: Renderer2
) {
}
ngOnInit() {
const text = this.renderer.createText('Hello World'); // <-- TO Be Noted
this.renderer.appendChild(this.el.nativeElement, text);
}
}
我想用指令设置 HTML 元素的内容。
export class AdvertisementDirective {
constructor(el: ElementRef) {
el.nativeElement.style.background = 'yellow';
el.nativeElement.content = '<p>Hello World<p>';
}
}
但是它不起作用,也没有给出任何错误。
这样做的想法是在指令中包含广告代码,并在我使用指令属性的任何地方设置它。广告代码包含JavaScript
和HTML代码。
刚刚用以下方法修复了它:
el.nativeElement.innerHTML = '<p>Hello World<p>';
我意识到 nativeElement
应该接受所有 JavaScript
方法,因为它是原生 HTML 元素。
DOM 通过直接更改 nativeElement
上的属性进行操作不被认为是一种好的做法。它在某些情况下也不会工作,例如使用 Angular Universal 的 Web Workers 和服务器端渲染。
更安全的方法是使用 Renderer2
.
import { ..., AfterViewInit, ElementRef, ViewChild, Renderer2, ... } from '@angular/core';
...
export class AdvertisementDirective implements AfterViewInit {
@ViewChild('templateRefName') el: ElementRef;
constructor(
private renderer: Renderer2
) {
}
ngAfterViewInit() {
this.renderer.setStyle(this.el.nativeElement, 'background', 'yellow');
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '<p>Hello World<p>');
}
}
并在模板中:
<div #templateRefName></div>
附加文本也可以通过使用 renderer2 对象的 createText 属性 来实现。
import {ElementRef, ViewChild, Renderer2} from '@angular/core';
export class AdvertisementDirective {
@ViewChild('templateRefName') el: ElementRef;
constructor(
private renderer: Renderer2
) {
}
ngOnInit() {
const text = this.renderer.createText('Hello World'); // <-- TO Be Noted
this.renderer.appendChild(this.el.nativeElement, text);
}
}