首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不想转义HTML标记,并在角应用程序中使用对象文字。

问我不想转义HTML标记,并在角应用程序中使用对象文字。
EN

Stack Overflow用户
提问于 2014-09-10 08:38:32
回答 2查看 1.1K关注 0票数 2

我是AngularJS的新手。我不想转义HTML标记,并编写了下面的代码。

首先,定义deliberatelyTrustDangerousSnipet()我成功地转义了标记(在这个站点中有了很好的顾问)。

第二,我想使用<div ng-bind-html="phone.snippet"></div>。

代码语言:javascript
复制
<script>
  angular.module('plunker', ['ngSanitize'])
  .controller('MainCtrl', ['$scope', '$sce', function($scope, $sce) { 
    $scope.phone = 
      {'name': 'Nexus S',
       'snippet': '<iframe width="560" height="315" src="//www.youtube.com/embed/-RRqZ7FAlG0?rel=0" frameborder="0" allowfullscreen></iframe>'};
    // This works well
    $scope.deliberatelyTrustDangerousSnippet = function() {
      return $sce.trustAsHtml('<iframe width="560" height="315" src="//www.youtube.com/embed/-RRqZ7FAlG0?rel=0" frameborder="0" allowfullscreen></iframe>');
    };
    // This doesn't work
    //$sce.trustAsHtml($scope.article.content);
  }])
</script>

<div ng-controller="MainCtrl">
  <div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div>

  <!-- ### Can we write like below? ### -->
  <div ng-bind-html="phone.snippet"></div>

</div>    

代码也在柱塞上。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-10 09:07:53

代码语言:javascript
复制
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-rc.0/angular.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.0-rc.0/angular-sanitize.js"></script>
  </head>

  <body>
    <script>
      angular.module('plunker', ['ngSanitize'])
      .controller('MainCtrl', ['$scope', '$sce', function($scope, $sce) { 
        $scope.phone = 
          {'name': 'Nexus S',
           'snippet': '<iframe width="560" height="315" src="//www.youtube.com/embed/-RRqZ7FAlG0?rel=0" frameborder="0" allowfullscreen></iframe>'};
        $scope.phone.snippet = $sce.trustAsHtml($scope.phone.snippet);

      }])
    </script>

    <div ng-controller="MainCtrl">
      <div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div>

      <!-- ### Can we write like below? ### -->
      <div ng-bind-html="phone.snippet"></div>

    </div>    
  </body>

</html>

另一个选项是添加ngSanitize.js,这样您就不需要执行$sce.trustAsHtml了

票数 2
EN

Stack Overflow用户

发布于 2014-09-10 08:59:36

您可以定义一个secureHtml过滤器。该过滤器将您的表达式信任为HTML,如下所示

代码语言:javascript
复制
youApp.filter('secureHtml', function ($sce) {
    return function (input) {
      return $sce.trustAsHtml(input);
    }
  })

然后,您可以使用模板中的过滤器,如下所示:

代码语言:javascript
复制
<div ng-bind-html="harmlessSnippet | secureHtml"></div>

用您的示例处理柱塞:http://plnkr.co/edit/IsW7Q6s4bySp8Eim40kf?p=preview

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25760857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档