zoukankan      html  css  js  c++  java
  • 【转】AngularJS 取消对 HTML 片段的转义

    今天尝试用 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>
    

    亲测可用,附上原文地址(可能打不开)  

    原文  http://blog.sloger.info/posts/cancel-escape-html-partial-in-angularjs

  • 相关阅读:
    mysql关联查询
    MySQL数据库面试题(转发来自https://thinkwon.blog.csdn.net/article/details/104778621)
    iview + vue + thinphp5.1 源码
    <!--标签嵌套规则-->
    PHP的基本变量检测方法
    PHP的八种变量
    php变量命名规范
    C++11新特性-常用
    算法设计-DP常见问题及解题技巧
    Web开发-概述
  • 原文地址:https://www.cnblogs.com/baobaodong/p/4626038.html
Copyright © 2011-2022 走看看