深入理解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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
js中的escape及unescape函数的php实现代码
Sep 04 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
Aug 12 Javascript
如何用jquery控制表格奇偶行及活动行颜色
Apr 20 Javascript
javascript实现根据时间段显示问候语的方法
Jun 18 Javascript
JavaScript获得指定对象大小的方法
Jul 01 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
Sep 23 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
vue2.0移除或更改的一些东西(移除index key)
Aug 28 Javascript
ES6 Object.assign()的用法及其使用
Jan 18 Javascript
vue实现给div绑定keyup的enter事件
Jul 31 Javascript
JavaScript流程控制(分支)
Dec 06 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
用mysql内存表来代替php session的类
2009/02/01 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
javascript RadioButtonList获取选中值
2009/04/09 Javascript
JS求平均值的小例子
2013/11/29 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
js实现选项卡内容切换以及折叠和展开效果【推荐】
2017/01/08 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
基本DOM节点操作
2017/01/17 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
ES6(ECMAScript 6)新特性之模板字符串用法分析
2017/04/01 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
python 图像平移和旋转的实例
2019/01/10 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
python属于解释语言吗
2020/06/11 Python
The Hut英国:英国领先的豪华在线百货商店
2019/07/26 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
秋天的雨教学反思
2014/04/27 职场文书
小班下学期个人总结
2015/02/12 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
使用MybatisPlus打印sql语句
2022/04/22 SQL Server
python数字图像处理之图像的批量处理
2022/06/28 Python