Angular用[innerHTML]显示html文本,保留富文本在html中的行内style样式(SafeHtmlPipe)

26 篇文章 2 订阅

项目中经常需要用到富文本组件,我使用的一个轻量级的富文本组件是Trumbowyg,压缩后文件很小。编辑文本后,显示也是一个问题。

一段文字在轻量级文本编辑器中展示如下:富文本
在ts中模拟此富文本:

import {Component, OnInit} from '@angular/core'

@Component({
  selector: 'app-inner-html',
  templateUrl: './inner-html.component.html',
  styleUrls: ['./inner-html.component.less']
})
export class InnerHtmlComponent implements OnInit {
  richText = `
  <p>1、<strong style="color: rgb(192, 80, 77);">ECMAScript</strong> 和 
  <strong style="color: rgb(192, 80, 77);">JavaScript</strong> 的关系
</p>
<p>
  <em>一个常见的问题是,<span style="color: rgb(192, 80, 77);">ECMAScript</span>
  和<span style="color: rgb(192, 80, 77);">JavaScript</span> 到底是什么关系?
  </em>
</p>
  `

  constructor() {
  }

  ngOnInit(): void {
  }

}

html中显示:

<h3>显示html文本</h3>
<div class="text" [innerHTML]="richText"></div>

效果:
效果
会发现跟在文本编辑器中表现不一致,打开 浏览器 检查-Elements 查看源码发现内联的style消失了,
html源码
这时我们需要添加一个safeHtmlPipe,并在AppModule的declarations数组中声明:

// safe-html.pipe.ts
import {Pipe, PipeTransform} from '@angular/core'
import {DomSanitizer} from '@angular/platform-browser'

/*
 * 为了不使html去掉其中的style 样式
 */
@Pipe({name: 'safeHtml'})
export class SafeHtmlPipe implements PipeTransform {
  constructor(private sanitizer: DomSanitizer) {
  }

  transform(html) {
    return this.sanitizer.bypassSecurityTrustHtml(html)
  }
}
import {SafeHtmlPipe} from './pipes/safe-html.pipe'

@NgModule({
  declarations: [
    ...
    SafeHtmlPipe,
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

修改inner-html.component.html;

<div class="text" [innerHTML]="richText | safeHtml"></div>

最终效果:
最终效果

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值