AngularJS: Fügen Sie HTML aus einer Zeichenfolge ein

73

Ich habe viel danach gesucht, aber entweder kann ich die Antwort nicht finden oder ich verstehe sie nicht. Ein konkretes Beispiel gewinnt die Abstimmung =)

  • Ich habe eine Funktion, die eine HTML-Zeichenfolge zurückgibt.
  • Ich kann die Funktion nicht ändern.
  • Ich möchte, dass das durch die Zeichenfolge dargestellte HTML in das DOM eingefügt wird.
  • Ich verwende gerne einen Controller, eine Direktive, einen Dienst oder etwas anderes, das funktioniert (und eine vernünftige Vorgehensweise ist).
  • Haftungsausschluss: Ich verstehe $ compile nicht gut.

Folgendes habe ich versucht:

// My magic HTML string function.
function htmlString (str) {
    return "<h1>" + str + "</h1>";
}

function Ctrl ($scope, $compile) {
  $scope.htmlString = htmlString;
}
Ctrl.$inject = ["$scope", "$compile"];

Das hat nicht funktioniert.

Ich habe es auch als Direktive versucht:

// My magic HTML string function.
function htmlString (str) {
    return "<h1>" + str + "</h1>";
}

angular.module("myApp.directives", [])
  .directive("htmlString", function () {
    return {
      restrict: "E",
      scope: { content: "@" },
      template: "{{ htmlStr(content) }}"
    }
  });

  ... and in my HTML ...

  <html-string content="foo"></html-string>

Hilfe?

Hinweis

Ich habe mir unter anderem diese angesehen, konnte sie aber nicht zum Laufen bringen.

Sir Robert
quelle

Antworten:

90

Schauen Sie sich das Beispiel in diesem Link an:

http://docs.angularjs.org/api/ngSanitize.$sanitize

Grundsätzlich hat Angular eine Anweisung, HTML in Seiten einzufügen. In Ihrem Fall können Sie den HTML-Code mit der Direktive ng-bind-html wie folgt einfügen:

Wenn Sie dies alles bereits getan haben:

// My magic HTML string function.
function htmlString (str) {
    return "<h1>" + str + "</h1>";
}

function Ctrl ($scope) {
  var str = "HELLO!";
  $scope.htmlString = htmlString(str);
}
Ctrl.$inject = ["$scope"];

Dann könnten Sie in Ihrem HTML im Rahmen dieses Controllers

<div ng-bind-html="htmlString"></div>
Ganaraj
quelle
1
Vielen Dank! Das hat funktioniert. Einige Änderungen vorgenommen: Der Link wurde korrigiert (SO hat ihn seltsam analysiert), "ng-bind-html" in "ng-bind-html-unsicher" geändert und ein vollständigeres Beispiel angegeben.
Sir Robert
8
Es ng-bind-html-unsafeist bis 1.0.8, danach nur, ng-bind-htmlweil die sicheren und unsicheren Funktionen zusammengeführt wurden. Github.com/angular/angular.js/blob/master/…
Matthew
9
@AakilFernandes, ich musste ngSanitizemein Hauptmodul hinzufügen , damit ng-bind-htmles funktioniert.
Igreulich
15

Sie können auch , verwenden $sce.trustAsHtml('"<h1>" + str + "</h1>"'). Wenn Sie weitere Informationen benötigen, lesen Sie bitte $ sce

Java Basketball
quelle