深入理解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 相关文章推荐
使用JS操作页面表格,元素的一些技巧
Feb 02 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
JQuery下拉框应用示例介绍
Apr 23 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
jQuery Validate插件实现表单强大的验证功能
Dec 18 Javascript
Javascript数组中push方法用法分析
Oct 31 Javascript
微信小程序中的swiper组件详解
Apr 14 Javascript
jQuery输入框密码的显示隐藏【代码分享】
Apr 29 jQuery
Vuex提升学习篇
Jan 11 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
Jun 10 Javascript
详解mpvue开发小程序小总结
Jul 25 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 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
php设计模式 Proxy (代理模式)
2011/06/26 PHP
php获取图片信息的方法详解
2015/12/10 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
javascript css styleFloat和cssFloat
2010/03/15 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
javascript闭包的理解
2015/04/01 Javascript
JavaScript职责链模式概述
2016/09/17 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
2016/11/07 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
vue-cli 打包后提交到线上出现 &quot;Uncaught SyntaxError:Unexpected token&quot; 报错
2018/11/06 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python3使用requests包抓取并保存网页源码的方法
2016/03/15 Python
基于python的字节编译详解
2017/09/20 Python
Python字典遍历操作实例小结
2019/03/05 Python
Django使用中间键实现csrf认证详解
2019/07/22 Python
python 提取文件指定列的方法示例
2019/08/07 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
机电一体化职业规划书
2014/01/07 职场文书
组织关系转移介绍信
2014/01/16 职场文书
社区国庆节活动方案
2014/02/05 职场文书
廉洁校园实施方案
2014/05/25 职场文书
运动会入场口号
2014/06/07 职场文书
浅析MySQL如何实现事务隔离
2021/06/26 MySQL