深入理解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 中的事件教程
Apr 05 Javascript
JavaScript的漂亮的代码片段
Jun 05 Javascript
浅谈Javascript中深复制
Dec 01 Javascript
javascript实现全角半角检测的方法
Jul 23 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
Apr 28 Javascript
浅谈String.valueOf()方法的使用
Jun 06 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
node.js 利用流实现读写同步,边读边写的方法
Sep 11 Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
js布局实现单选按钮控件
Jan 17 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
php实现图片按比例截取的方法
2017/02/06 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
基于axios封装fetch方法及调用实例
2018/02/05 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
three.js实现炫酷的全景3D重力感应
2018/12/30 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
Python中Selenium模拟JQuery滑动解锁实例
2017/07/26 Python
Python中format()格式输出全解
2019/04/12 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
生日宴会策划方案
2014/06/03 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
大学生团员个人总结
2015/02/14 职场文书
CSS中妙用 drop-shadow 实现线条光影效果
2021/11/11 HTML / CSS