为什么这不显示HTML

时间:2016-06-17 15:29:02

标签: javascript angularjs ng-bind-html

在我的角度应用程序中,在我检索的数据中,有一些文本可能包含换行符,链接以及我需要转换为HTML的其他内容。所以我将这个功能实现为"转换"那些字符串到html:

$scope.textToHTML = function(text){
    if(!text){return "";}
    var html = text.replace("\r\n", "<br>")// Windows line break
        .replace("\n", "<br>")// Carriage Return
        .replace("\r", "<br>")// Line feed
        .replace("\t", "<span style=\"margin-left: 20px;\"></span>")
        .replace("(https?:\\/\\/[^\\s]*)", "<a href=\"$1\" target=\"_blank\">$1</a>");

    return $sce.trustAsHtml(html); 
}

然后我就这样使用它: <p data-ng-bind-html="">{{textToHTML(company.description)}}</p>

当我删除data-ng-bind-html时,我会看到已删除的代码(已转义),但有了它,我的<p>始终为空。我读过Angular $ sce doc,但我一定错过了一些东西,因为我还不太了解trustAs()做了什么...

是否应该返回一种包含可以安全解释的代码的字符串? 或者它应该说angular&#34;这个字符串是安全的,如果你在data-ng-bind-html属性中看到它就好像显示它一样!&#34;

1 个答案:

答案 0 :(得分:3)

正确使用ngBindHtml将是:

<p data-ng-bind-html="textToHTML(company.description)"></p>