深入理解AngularJS中的ng-bind-html指令


Posted in Javascript onMarch 27, 2017

前言

在为html标签绑定数据的时,如果绑定的内容是纯文本,你可以使用{{}}或者ng-bind。但在为html标签绑定带html标签的内容的时候,angularjs为了安全考虑,不会将其渲染成html,而是将其当做文本直接在页面上展示。

先来看一个例子

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title></title>
 <script src="js/angular.min.js"></script>
 <script>
 angular.module("myapp", []).controller("MyController", function ($scope) {
 $scope.content = "<h1>Hello world.</h1>";
 $scope.txt = "Hello txt world";
 });
 </script>
</head>
<body ng-app="myapp">
 <div ng-controller="MyController">
 {{content}}
 <div ng-bind="content"></div> 
 </div>
</body>
</html>

输出

深入理解AngularJS中的ng-bind-html指令

ng-bind-html指令

<div ng-bind-html="content"></div>

这时就会出现安全的错误,如图:

深入理解AngularJS中的ng-bind-html指令

但可以通过引入下面的模块,自动检测html的内容是否安全

<script src="http://apps.bdimg.com/libs/angular.js/1.5.0-beta.0/angular-sanitize.min.js"></script>

 <script>
 angular.module("myapp", ["ngSanitize"]).controller("MyController", function ($scope) {
 $scope.content = "<h1>Hello world.</h1>";
 $scope.txt = "Hello txt world";
 });
 </script>

这时刷新预览

深入理解AngularJS中的ng-bind-html指令

所以

ng-bind-html 指令是通一个安全的方式将内容绑定到 HTML 元素上。

当你想让 AngularJS 在你的应用中写入 HTML,你就需要去检测一些危险代码。通过在应用中引入 "angular-santize.js" 模块,使用 ngSanitize 函数来检测代码的安全性。 in your application you can do so by running the HTML code through the ngSanitize function.

另外一种处理方式

通过自定义过滤器,将带html标签的内容都当成安全的进行处理。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title></title>
 <script src="js/angular.min.js"></script>
 <!--<script src="http://apps.bdimg.com/libs/angular.js/1.5.0-beta.0/angular-sanitize.min.js"></script>-->
 <script>
 angular.module("myapp", []).controller("MyController", function ($scope) {
  $scope.content = "<h1>Hello world.</h1>";
  $scope.txt = "Hello txt world";
 }).filter("safeHtml", function ($sce) {
  return function (input) {
  //在这里可以对加载html渲染后进行特别处理。
  return $sce.trustAsHtml(input);
  };
 });
 </script>
</head>
<body ng-app="myapp">
 <div ng-controller="MyController">
 {{content}}
 <div ng-bind="content"></div> 
 <!--<div ng-bind-html="content"></div>-->
 <div ng-bind-html="content|safeHtml"></div>
 </div>
</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
用正则表达式 动态创建/增加css style script 兼容IE firefox
Mar 10 Javascript
ExtJs使用IFrame的实现代码
Mar 24 Javascript
js获取单选框或复选框值及操作
Dec 18 Javascript
JS正则表达式验证数字代码
Jan 28 Javascript
js判断手机号运营商的方法
Oct 23 Javascript
Bootstrap前端开发案例一
Jun 17 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 Javascript
js清除浏览器缓存的几种方法
Mar 15 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 Javascript
详解vue-cli中模拟数据的两种方法
Jul 03 Javascript
微信小程序实现卡片层叠滑动效果
Jun 21 Javascript
vscode vue 文件模板的配置方法
Jul 23 Javascript
vue2.0实战之基础入门(1)
Mar 27 #Javascript
jQuery中的deferred使用方法
Mar 27 #jQuery
Angular2利用组件与指令实现图片轮播组件
Mar 27 #Javascript
Vue 过渡实现轮播图效果
Mar 27 #Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 #Javascript
使用AngularJS2中的指令实现按钮的切换效果
Mar 27 #Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 #Javascript
You might like
PHP5.0对象模型探索之抽象方法和抽象类
2006/09/05 PHP
php中iconv函数使用方法
2008/05/24 PHP
将二维数组转为一维数组的2种方法
2014/05/26 PHP
php实现的用户查询类实例
2015/06/18 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
csdn 批量接受好友邀请
2009/02/19 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
详解Document.Cookie
2015/12/25 Javascript
学习Node.js模块机制
2016/10/17 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
Vue 样式绑定的实现方法
2019/01/15 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python对象体系深入分析
2014/10/28 Python
Python中encode()方法的使用简介
2015/05/18 Python
Python编程中装饰器的使用示例解析
2016/06/20 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
python连接mongodb密码认证实例
2018/10/16 Python
Django 批量插入数据的实现方法
2020/01/12 Python
移动端Html5中百度地图的点击事件
2019/01/31 HTML / CSS
旅游管理毕业生自荐书
2014/02/02 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android
MySQL自定义函数及触发器
2022/08/05 MySQL