angular中绑定的innerHtml内部样式不起作用的问题

问题:使用innerHtml绑定的内容在页面上不显示相应的样式

如:

listItem = "测试<span style='color:red'>红色</span>字体";

<div [innerHtml]="listItem"></div>

在浏览器中查看时,div中的内容是"测试<span>红色</span>字体",定义的样式没有了

解决:使用pipe

safe-html.pipe.ts

import { Pipe, PipeTransform } from "@angular/core";
import { DomSanitizer } from '@angular/platform-browser';
@Pipe({ name: 'safeHtml' })
export class SafeHtmlPipe implements PipeTransform {
constructor(private sanitized: DomSanitizer) { }
transform(value) {
return this.sanitized.bypassSecurityTrustHtml(value);
}
}

safe-html.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { SafeHtmlPipe } from "@shared/pipe/safe-html/safe-html.pipe";
@NgModule({
imports: [
CommonModule,
],
declarations: [SafeHtmlPipe],
exports: [SafeHtmlPipe]
})
export class SafeHtmlModule{ }

引入SafeHtmlModule,将<div [innerHtml]="listItem"></div>改为<div [innerHtml]="listItem | safeHtml"></div>即可。

转载于:https://www.cnblogs.com/boreguo/p/10243039.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Angular,使用innerHTML指令时,确实会自动移除style属性,这是因为Angular认为这样可以避免可能的XSS攻击。如果你需要在Angular使用innerHTML指令并保留style属性,可以使用以下两种方法的任何一种: 1. 使用DomSanitizer 可以使用Angular提供的DomSanitizer服务来手动信任HTML字符串。首先,在组件的构造函数注入DomSanitizer服务,然后在template使用管道来信任HTML字符串,例如: ``` import { Component } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; @Component({ selector: 'app-root', template: ` <div [innerHTML]="trustedHtml"></div> ` }) export class AppComponent { trustedHtml: any; constructor(private sanitizer: DomSanitizer) { const html = '<div style="color: red;">Hello, World!</div>'; this.trustedHtml = this.sanitizer.bypassSecurityTrustHtml(html); } } ``` 在这个例子,我们首先注入了DomSanitizer服务,然后在构造函数使用该服务的bypassSecurityTrustHtml方法来信任HTML字符串。最后,在template使用innerHTML指令和trustedHtml变量来渲染HTML。 2. 使用HostBinding 可以使用@HostBinding装饰器来绑定元素的innerHTML属性,并在组件手动设置该属性,例如: ``` import { Component, HostBinding } from '@angular/core'; @Component({ selector: 'app-root', template: ` <div [innerHTML]="html"></div> ` }) export class AppComponent { @HostBinding('innerHTML') html: any; constructor() { const html = '<div style="color: red;">Hello, World!</div>'; this.html = html; } } ``` 在这个例子,我们使用@HostBinding装饰器来绑定元素的innerHTML属性,并在构造函数手动设置该属性。这样,Angular就不会自动移除style属性了。 需要注意的是,使用innerHTML指令时需要非常谨慎,因为它可能会导致XSS攻击。因此,除非你确实需要使用innerHTML指令,否则最好避免使用它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值