深入理解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问题整理
Aug 16 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
Oct 15 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
JavaScript支持的最大递归调用次数分析
Jun 24 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
Aug 06 Javascript
jquery实现简单合拢与展开网页面板的方法
Sep 01 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
Vue 实现双向绑定的四种方法
Mar 16 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
Apr 29 Javascript
vue使用节流函数的踩坑实例指南
May 20 Vue.js
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验证码类分享
2014/11/18 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
2015/03/16 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
2016/07/13 PHP
5 cool javascript apps
2007/03/24 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
jQuery 技巧小结
2010/04/02 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
js原生Ajax的封装和原理详解
2017/03/11 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
在Django中限制已登录用户的访问的方法
2015/07/23 Python
Python实现按中文排序的方法示例
2018/04/25 Python
python文件拆分与重组实例
2018/12/10 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
Python循环实现n的全排列功能
2019/09/16 Python
使用python绘制温度变化雷达图
2019/10/18 Python
Python实现不规则图形填充的思路
2020/02/02 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
学校交通安全责任书
2014/08/25 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
车辆年审委托书范本
2014/09/18 职场文书
机关作风建设自查报告及整改措施
2014/10/21 职场文书
公务员政审材料范文
2014/12/23 职场文书