将HTML插入到视图中

是否有可能在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>

对于Angular 1.x,在HTML中使用ng-bind-html

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

此时,您将attempting to use an unsafe value in a safe context错误中attempting to use an unsafe value in a safe context因此您需要使用ngSanitize或$ sce来解决该问题。

$ SCE

在控制器中使用$sce.trustAsHtml()来转换html字符串。

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

ngSanitize

有2个步骤:

  • 包括angular-sanitize.min.js资源,即:
    <script src="lib/angular/angular-sanitize.min.js"></script>

  • 在一个js文件(控制器或通常app.js)中,包含ngSanitize,即:
    angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])


  • 你也可以像这样创建一个过滤器:

    var app = angular.module("demoApp", ['ngResource']);
    
    app.filter("trust", ['$sce', function($sce) {
      return function(htmlCode){
        return $sce.trustAsHtml(htmlCode);
      }
    }]);
    

    然后在视图中

    <div ng-bind-html="trusted_html_variable | trust"></div>
    

    注意 :此过滤器信任传递给它的任何和所有html,并且如果将带有用户输入的变量传递给它,则可能会呈现XSS漏洞。


    Angular JS在标签内显示HTML

    上述链接提供的解决方案对我来说很有效,但这个线程没有任何选项。 对于任何正在寻找与AngularJS 1.2.9版本相同的东西的人

    这是一个副本:

    好的,我找到了解决方案:

    JS:

    $scope.renderHtml = function(html_code)
    {
        return $sce.trustAsHtml(html_code);
    };
    

    HTML:

    <p ng-bind-html="renderHtml(value.button)"></p>
    

    编辑:

    设置如下:

    JS文件:

    angular.module('MyModule').controller('MyController', ['$scope', '$http', '$sce',
        function ($scope, $http, $sce) {
            $scope.renderHtml = function (htmlCode) {
                return $sce.trustAsHtml(htmlCode);
            };
    
            $scope.body = '<div style="width:200px; height:200px; border:1px solid blue;"></div>'; 
    
        }]);
    

    HTML文件:

    <div ng-controller="MyController">
        <div ng-bind-html="renderHtml(body)"></div>
    </div>
    
    链接地址: http://www.djcxy.com/p/48141.html

    上一篇: Insert HTML into view

    下一篇: asp.net mvc [handleerror] [authorize] with JsonResult?