深入理解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 生成指定范围数值随机数
Jan 09 Javascript
锋利的jQuery 要点归纳(一) jQuery选择器
Mar 21 Javascript
JQuery切换显示的效果实例代码
Feb 27 Javascript
浅谈angularJS中的事件
Jul 12 Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 Javascript
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
AngularJs 延时器、计时器实例代码
Sep 16 Javascript
ES6的Fetch异步请求的实现方法
Dec 07 Javascript
记录vue做微信自定义分享的一些问题
Sep 12 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
uniapp 微信小程序 自定义tabBar 导航
Apr 22 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 进度条实现代码
2009/03/10 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
drupal 代码实现URL重写
2011/05/04 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
详解jQuery的Cookie插件
2016/11/23 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
深入分析element ScrollBar滚动组件源码
2019/01/22 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
python实现井字棋游戏
2020/03/30 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
pycharm执行python时,填写参数的方法
2018/10/29 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
解决python 找不到module的问题
2020/02/12 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
专业实习自我鉴定
2013/10/29 职场文书
出生医学证明样本
2014/01/17 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
合作合同协议书范本
2015/01/27 职场文书
立案决定书范文
2015/06/24 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
Go timer如何调度
2021/06/09 Golang