深入理解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 相关文章推荐
javascript学习笔记(十五) js间歇调用和超时调用
Jun 20 Javascript
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
JSON序列化与解析原生JS方法且IE6和chrome测试通过
Sep 05 Javascript
JavaScript中5种调用函数的方法
Mar 12 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
jQuery的Read()方法代替原生JS详解
Nov 08 Javascript
JsChart组件使用详解
Mar 04 Javascript
js中apply()和call()的区别与用法实例分析
Aug 14 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
Apr 08 Javascript
Fetch超时设置与终止请求详解
May 18 Javascript
javascript实现超好看的3D烟花特效
Jan 01 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
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP 验证登陆类分享
2015/03/13 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
php实现的双色球算法示例
2017/06/20 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
js实现控制文件拖拽并获取拖拽内容功能
2018/02/17 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
Python完全新手教程
2007/02/08 Python
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python之变量类型和if判断方式
2020/05/05 Python
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
全球最受追捧的运动服品牌领先数字目的地:Stylerunner
2020/11/25 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
高中自我评价分享
2013/12/05 职场文书
毕业设计计划书
2014/01/09 职场文书
学校岗位设置方案
2014/01/16 职场文书
数控专业毕业生自荐信范文
2014/03/04 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
公务员考察材料范文
2014/12/23 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
《失物招领》教学反思
2016/02/20 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书