如何使用 AngularJS 模板渲染 html

IT技术 javascript angularjs
2021-02-22 08:18:32

这是我的模板:

<div class="span12">
  <ng:view></ng:view>
</div>

这是我的视图模板:

<h1>{{stuff.title}}</h1>

{{stuff.content}}

我得到contentas html,我想在视图中显示它,但我得到的只是原始 html 代码。如何呈现该 HTML?

5个回答

利用-

<span ng-bind-html="myContent"></span>

你需要告诉 angular 不要逃避它。

API 在 AngularJS 1.2 中发生了变化。 stackoverflow.com/questions/18340872/...
2021-04-29 08:18:32
我只是将 <span ng-bind-html="myHtmlFragment"></span> 插入到我的模板中,没有做任何其他事情,效果很好。我不必注入 $sce。这是文档:docs.angularjs.org/api/ng/directive/ngBindHtml
2021-04-30 08:18:32
ngSanitize - 在这里使用答案时我缺少的一件事(您可以从 ng-bind-html 上的角度文档中获得)是您需要确保您的应用程序包含 ngSanitize module。没有它就行不通。
2021-05-02 08:18:32
ng-bind-html 单独工作,不使用 trustAsHtml
2021-05-03 08:18:32
由于 angular 的“地狱文档”,amccausl 为新的 Angular 用户节省了无数小时的调试时间,不推荐使用 ng-bind-html-unsafe,请参阅上面评论中的链接以解决答案。
2021-05-09 08:18:32

为此,我使用了自定义过滤器。

在我的应用程序中:

myApp.filter('rawHtml', ['$sce', function($sce){
  return function(val) {
    return $sce.trustAsHtml(val);
  };
}]);

然后,在视图中:

<h1>{{ stuff.title}}</h1>

<div ng-bind-html="stuff.content | rawHtml"></div>
这是一个很好的解决方案@Daniel。如果我使用$sce.trustAsHtml,我不需要包含ngSanitize对应用程序module依赖?我正在使用 Angular 1.3
2021-04-15 08:18:32
我们可以使用 ng-include 来实现这一点吗?
2021-04-18 08:18:32
这对我不起作用,我使用的是 angular 7。请提出解决方案。谢谢。
2021-04-28 08:18:32

在 angular 4+ 中,我们可以使用innerHTMLproperty 而不是ng-bind-html.

就我而言,它正在工作,我正在使用angular 5

<div class="chart-body" [innerHTML]="htmlContent"></div>

in.ts 文件

let htmlContent = 'This is the `<b>Bold</b>` text.';

您应该遵循 Angular 文档并使用 $sce - $sce 是一项为 AngularJS 提供严格上下文转义服务的服务。这是一个文档:http ://docs-angularjs-org-dev.appspot.com/api/ng.directive: ngBindHtmlUnsafe

以异步加载Eventbrite登录按钮为例

在您的控制器中:

someAppControllers.controller('SomeCtrl', ['$scope', '$sce', 'eventbriteLogin', 
  function($scope, $sce, eventbriteLogin) {

    eventbriteLogin.fetchButton(function(data){
      $scope.buttonLogin = $sce.trustAsHtml(data);
    });
  }]);

在您看来,只需添加:

<span ng-bind-html="buttonLogin"></span>

在您的服务中:

someAppServices.factory('eventbriteLogin', function($resource){
   return {
        fetchButton: function(callback){
            Eventbrite.prototype.widget.login({'app_key': 'YOUR_API_KEY'}, function(widget_html){
                callback(widget_html);
            })
      }
    }
});

因此,也许您希望在 index.html 中包含此内容以加载库、脚本并使用视图初始化应用程序:

<html>
  <body ng-app="yourApp">
    <div class="span12">
      <div ng-view=""></div>
    </div>
    <script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
    <script src="script.js"></script>
  </body>
</html>

那么 yourView.html 可能只是:

<div>
  <h1>{{ stuff.h1 }}</h1>
  <p>{{ stuff.content }}</p>
</div>

scripts.js 可以让您的控制器带有 $scope 数据。

angular.module('yourApp')
    .controller('YourCtrl', function ($scope) {
      $scope.stuff = {
        'h1':'Title',
        'content':"A paragraph..."
      };
    });

最后,您必须配置路由并分配控制器以查看它的 $scope(即您的数据对象)

angular.module('yourApp', [])
.config(function ($routeProvider) {
  $routeProvider
    .when('/', {
      templateUrl: 'views/yourView.html',
      controller: 'YourCtrl'
    });
});

我还没有测试过这个,如果有错误,抱歉,但我认为这是获取数据的 Angularish 方式

如果我想要相同的行为但不依赖于 routeProvider 怎么办?
2021-04-21 08:18:32
使用 ui-router 也是一样,只是它是 $stateProvider 而不是 $routeProvider 和 .state( 'yourState', { url:'/', templateUrl: 'yourView.html', controller: 'YourCtrl' });
2021-04-25 08:18:32