在 angular 中直接绑定 html 字符串到 `[innerhtml]` 会因默认安全策略被自动过滤;需通过 `domsanitizer` 显式信任内容,才能安全渲染富文本(如带链接的段落)。
Angular 默认对 [innerHTML] 绑定的内容执行严格的安全检查,任何包含
、 等标签的字符串都会被当作潜在 XSS 风险而原样转义显示(即显示为纯文本而非可渲染的 HTML),这正是你看到“HTML 没有生效”的根本原因——它不是“不工作”,而是被主动拦截了。
✅ 正确做法是:使用 DomSanitizer 的 bypassSecurityTrustHtml() 方法显式标记该字符串为“可信 HTML”,从而绕过 Angular 的默认清理机制:
import { Component, OnInit } from '@angular/core';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Component({
selector: 'app-rich-text',
template: ``
})
export class RichTextComponent implements OnInit {
str = 'Please ensure Process Model diagram represents Functions adequately (boxes that represent an activity or group of activities that produce an outcome):
Click here
';
safeStr!: SafeHtml;
constructor(private sanitizer: DomSanitizer) {}
ngOnInit() {
this.safeStr = this.sanitizer.bypassSecurityTrustHtml(this.str);
}
}⚠️ 重要注意事项:
getTextOnly(html: string): string { const doc = new DOMParser().parseFromString(html, 'text/html'); return doc.body.textContent || ''; }
总结:[innerHTML] 本身工作正常,问题在于 Angular 的安全模型。信任 HTML 必须显式授权,且始终以安全性为前提——信任 ≠ 放行,而是可控、可审计、可追溯的信任。