AngularJS:从字符串插入HTML


74

我已经为此寻找了很多,但我要么找不到答案,要么听不懂。一个具体的例子将赢得投票=)

  • 我有一个返回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>

救命?

注意

我查看了这些内容,但无法使其正常工作。

Answers:


90

看一下此链接中的示例:

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>

1
谢谢!那行得通。进行了一些编辑:修复了链接(SO奇怪地对其进行了解析),将“ ng-bind-html”更改为“ ng-bind-html-unsafe”,并给出了更完整的示例。
罗伯特爵士,

8
这是ng-bind-html-unsafe直到1.0.8,之后它只是ng-bind-html因为安全和不安全的功能合并github.com/angular/angular.js/blob/master/...
马太福音

9
@AakilFernandes,我必须添加ngSanitize到主模块ng-bind-html才能工作。
igreulich

15

您也可以使用$sce.trustAsHtml('"<h1>" + str + "</h1>"'),如果您想了解更多详细信息,请参考$ sce

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.