11

I have JSON variables that contain HTML.

By doing: {{source.HTML}} Angular is showing &lt; and &gt; instead of < and >.

What can I do to have Angular render the actual HTML?



UPDATE:
This is my controller:

app.controller('objectCtrl', ['$scope', '$http', '$routeParams',
  function($scope, $http, $routeParams) {

    var productId = ($routeParams.productId || "");

    $http.get(templateSource+'/object?i='+productId)
       .then(function(result) {
          $scope.elsevierObject = {};
          angular.extend($scope,result.data[0]);
        });
  }]);

Inside my HTML i can then use:

<div>{{foo.bar.theHTML}}</div>
floribon
  • 19,175
  • 5
  • 54
  • 66
Bob van Luijt
  • 7,153
  • 12
  • 58
  • 101
  • possible duplicate of [How to have AngularJS output escaped HTML](http://stackoverflow.com/questions/20436579/how-to-have-angularjs-output-escaped-html) – Seth Feb 11 '15 at 01:00
  • look into [`ng-bind-html`](https://docs.angularjs.org/api/ng/directive/ngBindHtml) – New Dev Feb 11 '15 at 01:04
  • Hi @Seth it's not a duplicate, this one focusses on the curly brace notation. – Bob van Luijt Feb 11 '15 at 01:08

1 Answers1

24

Do you want to show the HTML (like <b>Hello</b>) or render the HTML (like Hello) ?

  • If you want to show it, the curly bracket is enough. However if the html you have has html entities (like &lt;stuff) you need to manually unescape it, see this SO question.

  • If you want to render it, you need to use the ng-bind-html directive instead of curcly bracket (which, FYI, is a shortcut to the ng-bind directive). You need to tell Angular that the content injected into that directive is safe, using $sce.trustAsHtml.

See example of both cases below:

angular.module('test', []).controller('ctrl', function($scope, $sce) {
  $scope.HTML = '<b>Hello</b>';
  
  $scope.trust = $sce.trustAsHtml;
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="ctrl">
  <div>Show: {{HTML}}</div>
  <div>Render: <span ng-bind-html="trust(HTML)"></span></div>
</div>
Community
  • 1
  • 1
floribon
  • 19,175
  • 5
  • 54
  • 66