1. ホーム
  2. html

AngularJS:文字列からHTMLを挿入する

2023-12-16 23:18:10

質問

私はこのために多くのことを探したが、私は答えを見つけることができないか、または私はそれを理解していない。 具体的な例は、投票に勝つでしょう =)

  • 私はHTML文字列を返す関数を持っています。
  • 関数を変更することができません。
  • 文字列で表されるhtmlをDOMに挿入してほしい。
  • コントローラ、ディレクティブ、サービスなど、動作するもの(それなりに良いもの)であれば何でも良いのですが。
  • 免責事項:私は$compileをよく理解していません。

試してみたのはこんな感じです。

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

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

うまくいきませんでしたね。

ディレクティブとしても試してみました。

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

ヘルプは?

ノート

などを見ましたが、うまくいきませんでした。

どのように解決するのですか?

このリンクにある例を見てください。

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

基本的にangularはページにhtmlを挿入するためのディレクティブを持っています。あなたの場合は、以下のようにng-bind-htmlディレクティブを使用してhtmlを挿入することができます。

もし、すでにこのようなことをすべて行っているのであれば :

// 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"];

そして、そのコントローラのスコープ内のhtmlで、次のようにします。

<div ng-bind-html="htmlString"></div>