Monday, 17 April 2017

javascript - Insert HTML into view from AngularJS controller



Is it possible to create an HTML fragment in an AngularJS controller and have this HTML shown in the view?



This comes from a requirement to turn an inconsistent JSON blob into a nested list of id : value pairs. Therefore the HTML is created in the controller and I am now looking to display it.



I have created a model property, but cannot render this in the view without it just printing the HTML.






Update



It appears that the problem arises from angular rendering the created HTML as a string within quotes. Will attempt to find a way around this.



Example controller :



var SomeController = function () {

this.customHtml = '
  • render me please
';
}


Example view :






Gives :




"
  • render me please
"


Answer



For Angular 1.x, use ng-bind-html in the HTML:






At this point you would get a attempting to use an unsafe value in a safe context error so you need to either use ngSanitize or $sce to resolve that.



$sce



Use $sce.trustAsHtml() in the controller to convert the html string.



 $scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml(someHtmlVar);


ngSanitize



There are 2 steps:




  1. include the angular-sanitize.min.js resource, i.e.:


  2. In a js file (controller or usually app.js), include ngSanitize, i.e.:
    angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])



No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...