Javascript 如何使用AngularJS模板呈现html
这是我的模板:Javascript 如何使用AngularJS模板呈现html,javascript,angularjs,Javascript,Angularjs,这是我的模板: 这是我的视图模板: {{stuff.title} {{stuff.content} 我将内容作为html获取,我想在视图中显示它,但我得到的只是原始html代码。如何呈现该HTML?使用- <span ng-bind-html="myContent"></span> 您需要告诉angular不要转义它。因此,您可能希望在index.html中包含此文件,以加载库、脚本,并使用视图初始化应用程序: <html> <body
这是我的视图模板:
{{stuff.title}
{{stuff.content}
我将内容
作为html获取,我想在视图中显示它,但我得到的只是原始html代码。如何呈现该HTML?使用-
<span ng-bind-html="myContent"></span>
您需要告诉angular不要转义它。因此,您可能希望在index.html中包含此文件,以加载库、脚本,并使用视图初始化应用程序:
<html>
<body ng-app="yourApp">
<div class="span12">
<div ng-view=""></div>
</div>
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script src="script.js"></script>
</body>
</html>
最后,您必须配置路由并为其$scope(即您的数据对象)分配要查看的控制器
我还没有对此进行测试,如果有错误,很抱歉,但我认为这是获取数据的Angularish方法您应该遵循Angular文档并使用$sce-$sce是一种为AngularJS提供严格上下文转义服务的服务。这是一份文件: 让我们以异步加载Eventbrite登录按钮为例 在控制器中:
someAppControllers.controller('SomeCtrl', ['$scope', '$sce', 'eventbriteLogin',
function($scope, $sce, eventbriteLogin) {
eventbriteLogin.fetchButton(function(data){
$scope.buttonLogin = $sce.trustAsHtml(data);
});
}]);
在您看来,只需添加:
<span ng-bind-html="buttonLogin"></span>
为此,我使用自定义过滤器 在我的应用程序中:
myApp.filter('rawHtml', ['$sce', function($sce){
return function(val) {
return $sce.trustAsHtml(val);
};
}]);
然后,在视图中:
<h1>{{ stuff.title}}</h1>
<div ng-bind-html="stuff.content | rawHtml"></div>
{{stuff.title}
在angular 4+中,我们可以使用innerHTML
属性而不是ng bind html
在我的例子中,它正在工作,我正在使用angular 5
<div class="chart-body" [innerHTML]="htmlContent"></div>
In.ts文件
let htmlContent = 'This is the `<b>Bold</b>` text.';
让htmlContent='这是'Bold'文本';
HTML从何而来?在不同的情况下,您需要ngBindHtmlUnsafe
、ngSanitize
或自定义指令。html来自我的数据库内容是否绝对可信?例如,如果html包含脚本
标记,浏览器将执行它。这种类型的“注入”攻击是破坏应用程序和窃取用户数据的常见方式。AngularJS有一个单独的模块,名为ngSanitize
,可以用来去除HTML中的任何危险标记;它还有一个名为的指令,其工作原理类似于ngBindHtmlUnsafe
,但会为您去除危险标签。如果内容完全是你的-并且不是来自用户或第三方-那么你就不需要它。AngularJS 1.2中API的可能副本已经更改。由于angular的“hell docs”,amccausl为angular的新用户节省了无数个小时的调试时间,ng bind html不安全已被弃用,请参考上面评论中的链接来解决问题。我只是插入了我的模板,没有做任何其他事情,效果非常好。我不需要注入$sce。以下是文档:ngSanitize-我在这里使用答案时缺少的一件事(你可以从ngbind html上的angular文档中获得)是你需要确保你的应用程序包含ngSanitize模块。没有这一点,它就无法工作。ng bind html
单独工作,而不使用trustAsHtml
这是一个极好的解决方案@Daniel。如果我使用的是$sce.trustAsHtml
,我不需要将ngSanitize
依赖项包含到应用程序模块中?我使用的是Angular 1.3我们可以使用ng include来实现吗?这对我不起作用,我使用的是Angular 7。请提出解决方案。谢谢。如果我想要同样的行为,但不依赖routeProvider呢?使用ui路由器也是一样的,只是它是$stateProvider而不是$routeProvider和.state('yourState',{url:'/',templateUrl:'yourView.html',controller:'YourCtrl'});
myApp.filter('rawHtml', ['$sce', function($sce){
return function(val) {
return $sce.trustAsHtml(val);
};
}]);
<h1>{{ stuff.title}}</h1>
<div ng-bind-html="stuff.content | rawHtml"></div>
<div class="chart-body" [innerHTML]="htmlContent"></div>
let htmlContent = 'This is the `<b>Bold</b>` text.';