是否可以在AngularJS控制器中创建一个HTML片段,并在视图中显示该HTML?

这是因为需要将不一致的JSON blob转换为id:value对的嵌套列表。因此,HTML是在控制器中创建的,我现在希望显示它。

我已经创建了一个模型属性,但如果不打印HTML,就无法在视图中呈现它。


使现代化

问题似乎源于将创建的HTML作为引号中的字符串进行角度渲染。将尝试找到解决方法。

控制器示例:

var SomeController = function () {

    this.customHtml = '<ul><li>render me please</li></ul>';
}

示例视图:

<div ng:bind="customHtml"></div>

给予:

<div>
    "<ul><li>render me please</li></ul>"
</div>

当前回答

也可以使用nginclude。

<div class="col-sm-9 TabContent_container" ng-include="template/custom.html">
</div>

您可以使用“ngshow”显示隐藏此模板数据。

其他回答

在html上

<div ng-controller="myAppController as myCtrl">

<div ng-bind-html-unsafe="myCtrl.comment.msg"></div>

OR

<div ng-bind-html="myCtrl.comment.msg"></div

控制器上

mySceApp.controller("myAppController", function myAppController( $sce) {

this.myCtrl.comment.msg = $sce.trustAsHtml(html);

也适用于$scope.coment.msg=$sce.trustAsHtml(html);

另一个与blrbr非常相似的解决方案是:

angular.module('app')
.directive('renderHtml', ['$compile', function ($compile) {
    return {
      restrict: 'E',
      scope: {
        html: '='
      },
      link: function postLink(scope, element, attrs) {

          function appendHtml() {
              if(scope.html) {
                  var newElement = angular.element(scope.html);
                  $compile(newElement)(scope);
                  element.append(newElement);
              }
          }

          scope.$watch(function() { return scope.html }, appendHtml);
      }
    };
  }]);

然后

<render-html html="htmlAsString"></render-html>

注意,可以用element.replaceWith()替换element.append()

我今天试过了,唯一找到的办法就是

<div ng bind html unsafe=“expression”></div>

也可以使用nginclude。

<div class="col-sm-9 TabContent_container" ng-include="template/custom.html">
</div>

您可以使用“ngshow”显示隐藏此模板数据。

只需简单使用[ninnerHTML],如下所示:

<div [innerHTML]="htmlString"></div>

在您需要使用ng绑定html之前。。。