这里已经提供了简短的答案:使用<div [innerHTML]="yourHtml"> 绑定。
但是,这里提到的其他建议可能具有误导性。当你绑定到这样的属性时,Angular 有一个内置的清理机制。由于 Angular 不是一个专门的清理库,因此对可疑内容过于热衷而不冒任何风险。例如,它将所有 SVG 内容清理为空字符串。
您可能会听到有关“清理”您的内容的建议,方法是使用 DomSanitizer 使用 bypassSecurityTrustXXX 方法将内容标记为安全。也有人建议使用管道来执行此操作,并且该管道通常称为 safeHtml。
所有这些都具有误导性,因为它实际上绕过清理,而不是清理您的内容。这可能是一个安全问题,因为如果您曾经对用户提供的内容或您不确定的任何内容执行此操作,您就会面临恶意代码攻击。
如果 Angular 通过其内置的清理功能删除了您需要的东西——您可以做的不是禁用它,而是将实际的清理工作委托给擅长该任务的专用库。例如——DOMPurify。
我已经为它制作了一个包装库,因此它可以很容易地与 Angular 一起使用:
https://github.com/TinkoffCreditSystems/ng-dompurify
它还有一个管道来声明性地清理 HTML:
<div [innerHtml]="value | dompurify"></div>
这里建议的管道的不同之处在于它确实通过 DOMPurify 进行了清理,因此适用于 SVG。
要记住的一点是,DOMPurify 非常适合清理 HTML/SVG,但不是 CSS。所以你可以提供 Angular 的 CSS sanitizer 来处理 CSS:
import {NgModule, ɵ_sanitizeStyle} from '@angular/core';
import {SANITIZE_STYLE} from '@tinkoff/ng-dompurify';
@NgModule({
// ...
providers: [
{
provide: SANITIZE_STYLE,
useValue: ɵ_sanitizeStyle,
},
],
// ...
})
export class AppModule {}
它是内部的——hense ɵ 前缀,但这也是 Angular 团队在他们自己的包中使用它的方式。该库也适用于 Angular Universal 和服务器端渲染环境。