使用AngularJS解析ng-bind中的HTML

41

我在使用AngularJS时遇到了问题。我的应用程序从服务器请求一些数据,其中从服务器返回的数据之一是一个包含HTML字符串的值。我正在使用以下方式将其绑定到我的Angular模板中:

<div>{{{item.location_icons}}</div>

但是正如你所预期的那样,我看到的不是图标的图片,而是标记语言。基本上,div中的内容看起来像:

 "<i class='my-icon-class'/>"

这不是我想要的。

有人知道我可以做什么来解析转录中的HTML吗?

3个回答

41
您想要使用ng-bind-htmlng-bind-html-unsafe来实现这种目的。
示例在此处显示:这里

我应该如何在ng-bind-html中使用它?我知道如何使用ng-bind-unsafe-html,但不确定unsafe是否意味着这是一种不好的做法。您能详细说明一下ng-bind-html吗?Angular文档对此并不清楚。我尝试过使用它,但没有成功。 - Subtubes
1
老实说,我不是很确定。但我的理解是,清洗器将删除带有任何外部引用的标签,例如hrefsrc等等...如果您绑定用户输入,那么可能是不安全的,但如果您绑定到自己的内部值,我认为使用未经过清洗的版本是可以的。 - Tosh
10
ng-bind-html是在ngSanitize模块中的,就像ngResource一样,并没有预装在Angular中。您需要包含该脚本并确保您的应用程序依赖于它:var app = angular.module('app', ['ngSanitize']);。然后您就可以使用ng-bind-html指令了,像这样使用:<div ng-bind-html="somemodel"></div>。 - satchmorun
你可以在这里找到所有的插件:http://code.angularjs.org/ - sidonaldson
使用ng-bind-html$sanitize提供程序一起使用。 - Luis Delgado
显示剩余2条评论

18

由于ng-bind-html-unsafe已被弃用,你可以使用以下代码替代。

你需要在你的控制器内创建一个函数:

$scope.toTrustedHTML = function( html ){
    return $sce.trustAsHtml( html );
}

并在您的视图中使用类似以下的内容:

<span ng-bind-html='toTrustedHTML( myHTMLstring )'></span>

不要忘记注入$sce:

AppObj.controller('MyController', function($scope, $sce) {
    //your code here 
});

8

你是不是想说 $sanitize 而不是 $compile? - Paul Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接