深入理解AngularJS中的ng-bind-html指令和$sce服务


Posted in Javascript onSeptember 08, 2016

前言

Angularjs的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model。

但在我们的项目当中会遇到这样的情况,后台返回的数据中带有各种各样的html标签。

如:

$scope.currentWork.description = “hello,<br><b>今天我们去哪里?</b>”

我们用ng-bind-html这样的指令来绑定,结果却不是我们想要的。

是这样的

hello,
今天我们去哪里?

怎么办呢?

对于angular 1.2一下的版本我们必须要使用$sce这个服务来解决我们的问题。所谓sce即“Strict Contextual Escaping”的缩写。翻译成中文就是“严格的上下文模式”也可以理解为安全绑定吧。

来看看怎么用吧。

controller code:

$http.get('/api/work/get?workId=' + $routeParams.workId).success(function (work) {$scope.currentWork = work;});

HTML code:

<p> {{currentWork.description}}</p>

我们返回的内容中包含一系列的html标记。表现出来的结果就如我们文章开头所说的那样。这时候我们必须告诉它安全绑定。它可以通过使用$ sce.trustAsHtml() 。该方法将值转换为特权所接受并能安全地使用“ng-bind-html”。所以,我们必须在我们的控制器中引入$sce服务

controller('transferWorkStep2', ['$scope','$http','$routeParams','$sce', function ($scope,$http, $routeParams, $sce) {
$http.get('/api/work/get?workId=' + $routeParams.workId)
.success(function (work) {
 $scope.currentWork = work;
 $scope.currentWork.description = $sce.trustAsHtml($rootScope.currentWork.description);
});

html code:

<p ng-bind-html="currentWork.description"></p>

这样结果就完美的呈现在页面上了:

hello 
今天我们去哪里?

咱们还可以这样用,把它封装成一个过滤器就可以在模板上随时调用了

app.filter('to_trusted', ['$sce', function ($sce) {
return function (text) {
 return $sce.trustAsHtml(text);
};
}]);

html code:

<p ng-bind-html="currentWork.description | to_trusted"></p>

总结

以上就是关于AngularJS中的ng-bind-html指令和$sce服务的全部内容了,希望对大家的学习或者工作带来一定的帮助,如果有问题可以留言交流。

Javascript 相关文章推荐
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 Javascript
文本框水印提示效果的简单实现代码
Feb 22 Javascript
Seajs的学习笔记
Mar 04 Javascript
用于deeplink的js方法(判断手机是否安装app)
Apr 02 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
May 28 Javascript
JavaScript自定义数组排序方法
Feb 12 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Dec 14 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
layui表格分页 记录勾选的实例
Sep 02 Javascript
jQuery ready()和onload的加载耗时分析
Sep 08 #Javascript
Angularjs实现mvvm式的选项卡示例代码
Sep 08 #Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 #Javascript
jQuery事件绑定用法详解
Sep 08 #Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
Sep 08 #Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 #Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 #Javascript
You might like
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
php函数连续调用实例分析
2015/07/30 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
python的re模块应用实例
2014/09/26 Python
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
python实现高斯投影正反算方式
2020/01/17 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
极度干燥澳大利亚官方网站:Superdry澳大利亚
2019/03/28 全球购物
AJAX都有哪些有点和缺点
2012/11/03 面试题
小区门卫岗位职责
2013/12/31 职场文书
报关专员求职信范文
2014/02/22 职场文书
一年级学生评语
2014/04/23 职场文书
2014年医院工作总结
2014/11/20 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
python分分钟绘制精美地图海报
2022/02/15 Python
Android自定义双向滑动控件
2022/04/19 Java/Android