2016-06-17 110 views
2

在我的角度应用程序中,我检索的数据中,有一些文本可能包含换行符,链接和其他需要转换为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()做什么...

它应该返回一种可以安全解释的代码的字符串吗? 还是应该说角度“这个字符串是安全的,如果你看到它在data-ng-bind-html属性中显示它就好像!”

回答

3

的ngBindHtml的正确用法是:

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