【问题标题】:How to render raw html with AngularJS?如何使用 AngularJS 渲染原始 html?
【发布时间】:2015-10-31 01:06:41
【问题描述】:

我正在创建一个AngularJS 单页应用程序。 数据将从json-格式的网络服务获取。

问题是某些文本元素带有预格式化的 html 标签

json 输出:

{
   "text": "<p><span style="text-decoration: underline;"><strong>test text</string></span></p>"
}

现在我怎样才能显示这个文本并直接渲染 html,以便只向用户显示“测试”,其余的用作标记?

<h1>{{data.text}}</h1>

【问题讨论】:

标签: javascript html json angularjs ng-bind-html


【解决方案1】:

您需要将ng-bind-html="data.text" 添加到您的 h1 标签中。

你的 html 看起来像:

<h1 ng-bind-html="data.text"></h1>

文档:ngBindHtml

【讨论】:

  • 这听起来很有希望,但当我使用它时,我再也看不到任何输出,只是一个空白元素。
  • @membersound 您的 json 格式似乎有问题。您的属性 stule 应该使用 ' 而不是 " 否则它会破坏一切。但这可能只是一个错字。
  • 这只是我的示例中的一个错字。
  • 我错过了angular-sanitize 模块,现在可以使用了。
【解决方案2】:

尝试使用这个https://docs.angularjs.org/api/ng/directive/ngBind

<script>
  angular.module('bindExample', [])
    .controller('ExampleController', ['$scope', function($scope) {
      $scope.name = 'Whirled';
    }]);
</script>
<div ng-controller="ExampleController">
  <label>Enter name: <input type="text" ng-model="name"></label><br>
  Hello <span ng-bind="name"></span>!
</div>

【讨论】:

  • 他想打印html,而不是简单的var。
【解决方案3】:

Update2:是否可以为您剥离 html?可以这样做:

angular.module('myApp.filters', []).
   filter('htmlToPlaintext', function() {
      return function(text) {
         return String(text).replace(/<[^>]+>/gm, '');
      };
   }
);

还有你的html:

<div>{{myText | htmlToPlaintext}}</div>

查看更多信息:angularjs to output plain text instead of html

更新:你真的需要 json 中的 html 吗?最好将您的 html 存储在视图中并从您的 json 中获取数据。很好的分离和非常容易使用。

这是可能的,但不像非html那么容易(安全性高)。

在 Angular 1.3 中你需要如下:

<div ng-bind-html="htmlBind"></div>

在你的控制器中添加这个:

$scope.htmlBind = $sce.trustAsHtml('<span>Hi, I am <em>Joe</em>');

解释:你看到了$sce:

$sce 是一项为 AngularJS 提供严格上下文转义服务的服务。

trustAs(类型、值)

委托给 $sceDelegate.trustAs。因此,返回一个受 angular 信任的对象,用于指定的严格上下文转义上下文(例如 ng-bind-html、ng-include、任何 src 属性插值、任何 dom 事件绑定属性插值(例如 onclick)等。 ) 使用提供的值。请参阅 * $sce 以启用严格的上下文转义。

在这里阅读更多:

【讨论】:

  • 是否可以直接在 html 中解决这个问题?因为我收到了json 响应,并且希望通过&lt;h1 ng-bind-html="data.text"&gt;&lt;/h1&gt; 动态引用html 中的元素,而不必从控制器中调用$sce
  • 我无法控制 json 响应,因此我不得不处理预格式化的 html 标记。
  • 不,这是不可能的,因为我需要在获得时显示带有解释标记的文本。
  • 这对我来说是最好的解决方案,只需要 ng-bind-html
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多