Angular中innerHTML标签的样式不起作用的原因解析


Posted in Javascript onJune 18, 2019

1.背景

         在最近angular的项目中,需要用到[innerHTML]标签来指定一个div的样式:

//HTML部分
 <div class="contents" [innerHTML]="contents"></div>

 //TS部分
 contents = '<p>商品信息栏位<br><span style="color:red;">商品信息介绍</span></p>';

        但是上面的样式并不起作用,在Chorme中查看源码,发现style标签的样式在Angular编译的时候被屏蔽掉。这是为什么呢?客观别急,请往下看。

2.解决方案

       先说解决方案,最后再分析出现这种问题的原因。修改上面的TS:

// 在使用的页面引入DomSanitizer 
 import { DomSanitizer } from '@angular/platform-browser';
//构造方法里注入sanitizer对象
 constructor( private sanitizer: DomSanitizer
 ) { }
// 对HTML代码做处理
 this.contents= this.sanitizer.bypassSecurityTrustHtml("<p>W3商品信息栏位<br><span style="color:red;">商品信息介绍</span></p>");

这样虽然可以解决问题,但是这样做还不够:

•代码冗余繁杂:如果我们的contents内容过大,这样我们的代码就显得很乱,影响可读性和美观;
•不能复用:如果其他ts中也要用到innerHTML标签,又要重新写一遍上面的TS内容,没有复用性;

      基于以上两点,我们用自定义管道(pipe)来优化以上代码,使用ng generate pipe safe-html命令来生成一个pipe,并做适当的修改:

// 对safe-html.pipe.ts做适当修改<br><br>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);
 }
}<br><br>// 在使用innerHTML标签的属性里使用以上safeHtml管道

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

3.原因及原理

           所以,为什么会出现上面的问题呢?原来,Angular中默认将所有输入值视为不受信任。当我们通过 property,attribute,样式,类绑定或插值等方式,

   将一个值从模板中插入到DOM中时,Angular会自帮我们清除和转义不受信任的值。在开头的例子中,span标签里的样式被屏蔽了,不信请看:

  

Angular中innerHTML标签的样式不起作用的原因解析

  Angular 在编译的时候,会自动清理 HTML 输入并转义不安全的代码,因此在这种情况下,style被屏蔽,样式失效。这时候如果需要将样式片段渲染出来,

 就需要用到DomSanitizer了。DomSanitizer 可以把值净化为在不同 DOM 上下文中的安全内容,来帮我们防范跨站脚本攻击(XSS)类的安全问题。

总结

以上所述是小编给大家介绍的Angular中innerHTML标签的样式不起作用的原因解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
JavaScript Prototype对象
Jan 07 Javascript
js自动闭合html标签(自动补全html标记)
Oct 04 Javascript
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 Javascript
JS获取鼠标坐标位置实例分析
Jan 20 Javascript
Node.js实现兼容IE789的文件上传进度条
Sep 02 Javascript
jQuery事件绑定方法学习总结(推荐)
Nov 21 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
Dec 14 Javascript
Javascript循环删除数组中元素的几种方法示例
May 18 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 Javascript
学前端,css与javascript重难点浅析
Jun 11 Javascript
请求时token过期自动刷新token操作
Sep 11 Javascript
小程序click-scroll组件设计
Jun 18 #Javascript
在JavaScript中如何访问暂未存在的嵌套对象
Jun 18 #Javascript
用Vue.js在浏览器中实现裁剪图像功能
Jun 18 #Javascript
JS删除String里某个字符的方法
Jan 06 #Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 #Javascript
vue中typescript装饰器的使用方法超实用教程
Jun 17 #Javascript
简单学习5种处理Vue.js异常的方法
Jun 17 #Javascript
You might like
使用 eAccelerator加速PHP代码的目的
2007/03/16 PHP
那些年一起学习的PHP(一)
2012/03/21 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
php分页原理 分页代码 分页类制作教程
2016/09/23 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
谈谈JavaScript中的函数与闭包
2013/04/14 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
web 屏蔽BackSpace键实例代码
2016/12/24 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
vue的一个分页组件的示例代码
2017/12/25 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
Python编写一个闹钟功能
2017/07/11 Python
Python输出带颜色的字符串实例
2017/10/10 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
python输入多行字符串的方法总结
2019/07/02 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
Windows下Sqlmap环境安装教程详解
2020/08/04 Python
Python用来做Web开发的优势有哪些
2020/08/05 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
香港唯港荟酒店预订:Hotel ICON
2018/03/27 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
自荐信结尾
2013/10/27 职场文书
统计岗位职责
2014/02/21 职场文书
班组长岗位职责
2014/03/03 职场文书
文明寝室申报材料
2014/05/12 职场文书