angular - 如何强制组件重新加载
问题描述
我有一个 renderer2 可以更改模板上的元素。元素已 {{foo}} 更改为“Hello world”
如何重置元素以显示 {{foo}}
https://stackblitz.com/edit/renderer-setproperty-innerhtml-8gzjeg?file=app/app.component.ts
import { Component, Renderer2, AfterViewInit, ElementRef, ViewChild, ChangeDetectorRef } from '@angular/core';
@Component({
selector: 'my-app',
template: `
<div #el (click)="change()">{{foo}}</div>
<button (click)="reset()">reset</button>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
@ViewChild('el') el: ElementRef;
foo = 'click me'
constructor(private renderer: Renderer2,
private cdref: ChangeDetectorRef
) { }
change() {
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '<h1>Hello world</h1>');
}
reset() {
this.cdref.detectChanges()
}
}
我已经尝试过 this.cdref.detectChanges() 它不起作用
解决方案
不使用renderer2,为什么不使用innerHTML指令?它更容易管理您的代码,并且尽可能简单易懂。
只需从此替换您的代码:-
<div #el (click)="change()">{{foo}}</div>
对此:-
<div #el (click)="change()" [innerHTML]="foo"></div>
从此替换更改方法:-
change() {
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '<h1>Hello world</h1>');
}
对此:-
change() {
this.foo = '<h1>Hello world</h1>';
}
也从此替换重置方法:-
reset() {
this.cdref.detectChanges()
}
对此:-
reset() {
this.foo = 'click me';
}
https://stackblitz.com/edit/renderer-setproperty-innerhtml-8gzjeg?file=app/app.component.ts
推荐阅读
- c - 我怎样才能将 C++ 中的代码带到 C 中?... 这很重要 :(
- javascript - 相关模型值更改后角度不重新渲染视图
- flutter - 颤振:发生异常。_TypeError(类型'未来
' 不是类型 'Uint8List' 的子类型) - python - Python Selenium 元素点击被拦截
- matlab - matlab中的errorbar函数 - 定位问题
- firebase - 允许用户保存卡片,然后将其显示在应用程序的已保存页面中
- angular - 当我尝试执行 ng serve 命令时,“node_module/terser”中发生未处理的异常
- python - 如何从 JSON Lambda 输出中提取一个值?
- c# - ClassVar.prefab 未显示在 Unity 的检查器中
- .net - 如何使用 Azure AD 对 Azure .net API 调用进行身份验证?