如何将标记的innerHTML呈现为嵌套HTML

时间:2015-07-01 22:45:43

标签: javascript html json angularjs model-view-controller

使用AngularJS我正在发出GET请求以接收JSON文档。从这个JSON文档中,经过一些遍历后,我找到了一系列额外的JSON文档。通过对该数组中的每个对象进行更多JSON遍历,生成的内部JSON文档是原始HTML。

我试图在页面中显示每个原始HTML,但是,我只能将它们作为原始文本等效物显示为纯文本,而不是实际用HTML呈现。

在我的控制器中使用$ sce,我可以正确地将数组的一个特定元素上的一个特定路径呈现为HTML,但不是全部。

这是我的代码:

//    controller:
$scope.latestEmails = function() {

$http.get('/emails/last/'+$scope.numberOfEmails).success(function(response) {
    $scope.insertHtmlHere = $sce.trustAsHtml(response.body[0].body[0].content);
        $scope.latestEmails = response.body;
    });

}

//    HTML
<div ng-bind-html="insertHtmlHere"></div> <!-- works for that one given element -->
        <ul>
            <li ng-repeat="email in latestEmails">{{email.body[0].content}} <!-- raw text displayed --></li>
        </ul>

ng-bind-html正确替换了我的数组HTML中的第一个对象。 ng-repeat部分只是将HTML文本块(未呈现为HTML)放在列表​​中(屏幕截图:http://i.imgur.com/swmZ4Xe.png)。

有没有办法将我的ng-repeat中收到的HTML文本呈现为完整的HTML?我可以使用不同的AngularJS方法来实现这一目标吗?

非常感谢任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

经过大量的循环和连接技巧后,我找到了答案。基本上我遍历HTML文档数组,将每个文档连接在一起并显示连接的HTML。

这是我的解决方案代码:

// Controller:
    $http.get('/emails/last/'+$scope.numberOfEmails).success(function(response) {
    console.log('made a latestEmails get request');
    console.log(response);

    // get HTML of each email and concatenate together
    var concat;
    for(var i=0; i<response.body.length; i++) {
        var email = response.body[i].body[0].content;
        concat+=email;
    }
    // display the concatenated emails as pure HTML
    $scope.insertHtmlHere = $sce.trustAsHtml(concat);
});

// HTML
<div ng-bind-html="insertHtmlHere"></div>

希望能帮助遇到此问题的其他人。