深入理解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 相关文章推荐
Jquery 的扩展方法总结
Oct 01 Javascript
利用jquery写的左右轮播图特效
Feb 12 Javascript
node.js中使用q.js实现api的promise化
Sep 17 Javascript
Jquery $when done then的用法详解
May 20 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
Sep 09 Javascript
Angularjs 依赖压缩及自定义过滤器写法
Feb 04 Javascript
layui 优化button按钮和弹出框的方法
Aug 15 Javascript
vue中npm包全局安装和局部安装过程
Sep 03 Javascript
JS代码简洁方式之函数方法详解
Jul 28 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 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
php取整函数ceil,floo,round的用法及介绍
2013/08/31 PHP
php数组去重复数据示例
2014/02/25 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
php文件读取方法实例分析
2015/06/20 PHP
基于PHP实现用户注册登录功能
2016/10/14 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
js的event详解。
2006/09/06 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
如何阻止移动端浏览器点击图片浏览
2020/08/29 Javascript
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
如何搜索查找并解决Django相关的问题
2014/06/30 Python
Python实现定时精度可调节的定时器
2018/04/15 Python
python从子线程中获得返回值的方法
2019/01/30 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
快速解决Django关闭Debug模式无法加载media图片与static静态文件
2020/04/07 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
Origins悦木之源英国官网:雅诗兰黛集团高端植物护肤品牌
2017/11/06 全球购物
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
教师自我反思材料
2014/02/14 职场文书
小学教师读书活动总结
2014/07/08 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
奖学金个人总结
2015/03/04 职场文书
工地材料员岗位职责
2015/04/11 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书