深入理解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 相关文章推荐
JS类库Bindows1.3中的内存释放方式分析
Mar 08 Javascript
jquery ui resizable bug解决方法
Oct 26 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
js中浮点型运算BUG的解决方法说明
Jan 06 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
jQuery Ajax全解析
Feb 13 Javascript
详解Vue2 无限级分类(添加,删除,修改)
Mar 07 Javascript
Javascript中Promise的四种常用方法总结
Jul 14 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
Node在Controller层进行数据校验的过程详解
Aug 28 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 字符串处理函数大全
2010/03/23 PHP
php树型类实例
2014/12/05 PHP
PHP中的switch语句的用法实例详解
2015/10/21 PHP
php_pdo 预处理语句详解
2016/11/21 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
发两个小东西,ASP/PHP 学习工具。 用JavaScript写的
2007/04/12 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
jQuery中:has选择器用法实例
2014/12/30 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
js实现抽奖效果
2017/03/27 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[01:46]新英雄登场
2019/09/10 DOTA
python实现代理服务功能实例
2013/11/15 Python
Python常用内置函数总结
2015/02/08 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
python求质数的3种方法
2018/09/28 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
使用python脚本自动生成K8S-YAML的方法示例
2020/07/12 Python
杭州-DOTNET笔试题集
2013/09/25 面试题
临床医学大学生求职信
2013/09/28 职场文书
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
《落花生》教学反思
2014/02/25 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
二手车转让协议书
2015/01/29 职场文书
尼克胡哲观后感
2015/06/08 职场文书
python自动化测试通过日志3分钟定位bug
2021/11/20 Python