AngularJS中取消对HTML片段转义的方法例子


Posted in Javascript onJanuary 04, 2015

今天尝试用 Rails 做后端提供 JSON 格式的数据, AngularJS 做前端处理 JSON 数据,其中碰到 AngularJS 获取的是一段 HTML 文本,如果直接使用 data-ng-bind 的话是被转义过的,使用 data-ng-bind-html 则可以取消转义。

但是直接使用 data-ng-bind-html 的话会提示错误

Error: [$sce:unsafe] Attempting to use an unsafe value in a safe context.

HTML 片段需要先使用 $sce.trustAsHtml(html_in_string) 将标记为信任,然后才可以使用 data-ng-bind-html="html_in_string" 取消转义。

在我这里 Angular 通过 API 或取的所有文章中,每篇文章有个 html_body 属性是经过 Markdown 或者 Org 渲染过的 HTML 片段。

在通过 API 获取 JSON 数据后,使用 AngularJS 提供的 angular.forEach 方法对每个 post 的 html_body 进行标记,并将结果保存为 trustedBody, 然后在 HTML 中使用 data-ng-bind-html="post.trustedBody" 即可以取消转义。

AngularJS 部分

Blog.controller('PostsController', function ($scope, $http, $sce) {

  $scope.posts = [];
  $scope.syncPosts = function () {

    var request = $http.get('http:/localhost:3000/posts.json');

    request.success(function (response) {

      $scope.posts = angular.forEach(angular.fromJson(response), function (post) {

        post.trustedBody = $sce.trustAsHtml(post.html_body);

      });

    });

  };
  $scope.syncPosts();

});

HTML 部分
<div class="post-body markup-body" data-ng-bind-html="post.trustedBody"></div>
Javascript 相关文章推荐
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
Jul 09 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
使用ES6语法重构React代码详解
May 09 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
React Native中Navigator的使用方法示例
Oct 13 Javascript
利用jqprint插件打印页面内容的实现方法
Jan 09 Javascript
React+Webpack快速上手指南(小结)
Aug 15 Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 Javascript
原生JS实现自定义下拉单选选择框功能
Oct 12 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
Apr 17 Javascript
如何利用node转发请求详解
Sep 17 Javascript
jQuery中:enabled选择器用法实例
Jan 04 #Javascript
jQuery中:file选择器用法实例
Jan 04 #Javascript
jQuery中:button选择器用法实例
Jan 04 #Javascript
原生javascript实现隔行换色
Jan 04 #Javascript
jQuery中:reset选择器用法实例
Jan 04 #Javascript
浅谈 javascript 事件处理
Jan 04 #Javascript
jquery实现可拖拽弹出层特效
Jan 04 #Javascript
You might like
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
php事务回滚简单实现方法示例
2017/03/28 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
url 编码 js url传参中文乱码解决方案
2010/04/11 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
javascript下使用Promise封装FileReader
2016/02/19 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
2016/12/02 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
图文讲解选择排序算法的原理及在Python中的实现
2016/05/04 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
大学生入党自我鉴定
2013/10/31 职场文书
自我鉴定范文
2013/11/10 职场文书
元旦晚会邀请函
2014/01/27 职场文书
阳光体育活动总结
2014/04/30 职场文书
大气污染防治方案
2014/05/19 职场文书
迎国庆主题班会
2015/08/17 职场文书
机械生产实习心得体会
2016/01/22 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
Vue详细的入门笔记
2021/05/10 Vue.js