How to render html with AngularJS templates

后端 未结 5 686
遥遥无期
遥遥无期 2020-11-27 15:31

This is my template:

a

相关标签:
5条回答
  • 2020-11-27 16:01

    You shoud follow the Angular docs and use $sce - $sce is a service that provides Strict Contextual Escaping services to AngularJS. Here is a docs: http://docs-angularjs-org-dev.appspot.com/api/ng.directive:ngBindHtmlUnsafe

    Let's take an example with asynchroniously loading Eventbrite login button

    In your controller:

    someAppControllers.controller('SomeCtrl', ['$scope', '$sce', 'eventbriteLogin', 
      function($scope, $sce, eventbriteLogin) {
    
        eventbriteLogin.fetchButton(function(data){
          $scope.buttonLogin = $sce.trustAsHtml(data);
        });
      }]);
    

    In your view just add:

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

    In your services:

    someAppServices.factory('eventbriteLogin', function($resource){
       return {
            fetchButton: function(callback){
                Eventbrite.prototype.widget.login({'app_key': 'YOUR_API_KEY'}, function(widget_html){
                    callback(widget_html);
                })
          }
        }
    });
    
    0 讨论(0)
  • 2020-11-27 16:10

    In angular 4+ we can use innerHTML property instead of ng-bind-html.

    In my case, it's working and I am using angular 5.

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

    In.ts file

    let htmlContent = 'This is the `<b>Bold</b>` text.';
    
    0 讨论(0)
  • 2020-11-27 16:14

    So maybe you want to have this in your index.html to load the library, script, and initialize the app with a view:

    <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>
    

    Then yourView.html could just be:

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

    scripts.js could have your controller with data $scope'd to it.

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

    Lastly, you'll have to config routes and assign the controller to view for it's $scope (i.e. your data object)

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

    I haven't tested this, sorry if there's a bug but I think this is the Angularish way to get data

    0 讨论(0)
  • 2020-11-27 16:15

    To do this, I use a custom filter.

    In my app:

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

    Then, in the view:

    <h1>{{ stuff.title}}</h1>
    
    <div ng-bind-html="stuff.content | rawHtml"></div>
    
    0 讨论(0)
  • 2020-11-27 16:18

    Use-

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

    You need to tell angular to not escape it.

    0 讨论(0)
提交回复
热议问题