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 window.opener的用法分析
Apr 07 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
VS2008中使用JavaScript调用WebServices
Dec 18 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
Jan 06 Javascript
AngularJS语法详解
Jan 23 Javascript
jQuery的基本概念与高级编程
May 14 Javascript
js表单提交和submit提交的区别实例分析
Dec 10 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
Feb 12 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
桌面中心(一)创建数据库
2006/10/09 PHP
Access数据库导入Mysql的方法之一
2006/10/09 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
javascript实现获取字符串hash值
2015/05/10 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
2018/08/19 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
解决Vue打包后访问图片/图标不显示的问题
2019/07/25 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
通过javascript实现扫雷游戏代码实例
2020/02/09 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
set在python里的含义和用法
2019/06/24 Python
Django 开发环境与生产环境的区分详解
2019/07/26 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
python实现最短路径的实例方法
2020/07/19 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
英国经典球衣网站:Classic Football Shirts
2017/05/20 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
珍惜水资源建议书
2014/03/12 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
建议书的格式及范文
2015/09/14 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android