这是我的模板:
<div class="span12">
<ng:view></ng:view>
</div>
这是我的视图模板:
<h1>{{stuff.title}}</h1>
{{stuff.content}}
我得到的content
是html,我想在视图中显示它,但是我得到的只是原始的html代码。如何呈现HTML?
这是我的模板:
<div class="span12">
<ng:view></ng:view>
</div>
这是我的视图模板:
<h1>{{stuff.title}}</h1>
{{stuff.content}}
我得到的content
是html,我想在视图中显示它,但是我得到的只是原始的html代码。如何呈现HTML?
script
标签,则浏览器将执行该标签。这种类型的“注入”攻击是损坏应用程序和窃取用户数据的常用方法。AngularJS有一个单独的模块ngSanitize
,您可以使用它剥离任何危险标签的HTML。它还有一个称为的指令ngBindHtml
,其作用与相同ngBindHtmlUnsafe
,但会为您剥离危险标签。如果内容完全属于您-而不是来自用户或第三方-那么您就不需要它。
Answers:
采用-
<span ng-bind-html="myContent"></span>
您需要告诉angular不要逃避它。
ng-bind-html
独自工作而未使用trustAsHtml
为此,我使用了自定义过滤器。
在我的应用中:
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>
$sce.trustAsHtml
,则不需要包括ngSanitize
对app模块的依赖关系吗?我正在使用Angular 1.3
您应该遵循Angular文档并使用$ sce-$ sce是一项为AngularJS提供严格的上下文转义服务的服务。这是一个文档:http ://docs-angularjs-org-dev.appspot.com/api/ng.directive: ngBindHtmlUnsafe
让我们以异步加载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>
在您的服务中:
someAppServices.factory('eventbriteLogin', function($resource){
return {
fetchButton: function(callback){
Eventbrite.prototype.widget.login({'app_key': 'YOUR_API_KEY'}, function(widget_html){
callback(widget_html);
})
}
}
});
在angular 4+中,我们可以使用innerHTML
property代替ng-bind-html
。
就我而言,它正在工作,并且我正在使用angular 5。
<div class="chart-body" [innerHTML]="htmlContent"></div>
In.ts文件
let htmlContent = 'This is the `<b>Bold</b>` text.';
因此,也许您希望在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>
然后yourView.html可能只是:
<div>
<h1>{{ stuff.h1 }}</h1>
<p>{{ stuff.content }}</p>
</div>
scripts.js可能会使您的控制器具有$ scope的数据。
angular.module('yourApp')
.controller('YourCtrl', function ($scope) {
$scope.stuff = {
'h1':'Title',
'content':"A paragraph..."
};
});
最后,您必须配置路由并分配控制器以查看其$ scope(即您的数据对象)
angular.module('yourApp', [])
.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/yourView.html',
controller: 'YourCtrl'
});
});
我没有测试过,很抱歉,如果有错误,但是我认为这是Angularish获取数据的方式
ngBindHtmlUnsafe
,ngSanitize
或自定义指令。