深入理解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 相关文章推荐
date.parse在IE和FF中的区别
Jul 29 Javascript
jquery如何改变html标签的样式(两种实现方法)
Jan 16 Javascript
js中实现字符串和数组的相互转化详解
Jan 24 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
Sep 14 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
Mar 29 Javascript
详解vue数据渲染出现闪烁问题
Jun 29 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
Dec 14 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
Angular 多模块项目构建过程
Feb 13 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
PHP5.3.1 不再支持ISAPI
2010/01/08 PHP
php cache类代码(php数据缓存类)
2010/04/15 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
javascript一些不错的函数脚本代码
2008/09/10 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
2015/05/14 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
Express的HTTP重定向到HTTPS的方法
2018/06/06 Javascript
Vue验证码60秒倒计时功能简单实例代码
2018/06/22 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Python中使用PIPE操作Linux管道
2015/02/04 Python
django模板语法学习之include示例详解
2017/12/17 Python
基于python实现把图片转换成素描
2019/11/13 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
python工具快速为音视频自动生成字幕(使用说明)
2021/01/27 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
中专自荐信
2013/10/13 职场文书
银行介绍信范文
2014/01/10 职场文书
维修工先进事迹
2014/05/29 职场文书
2014最新自愿离婚协议书范本
2014/11/19 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
python关于集合的知识案例详解
2021/05/30 Python