我已经定义了一个这样的控制器:
app.controller("home", function ($scope, $http, $common) {
$http({
method: "GET",
url: '/posts/loadData'
}).then(function (response) {
//console.clear()
if (typeof response.data.posts != 'undefined') {
console.log(response.data.posts);
$scope.posts = $common.arrangePosts(response.data.posts);
}
});
})
以及安排数据的服务:
app.service('$common', function ($timeout, $sce, $httpParamSerializerJQLike) {
var that = this;
this.arrangePosts = function (rawPosts) {
var posts = [];
$.each(rawPosts, function (key, value) {
posts.push({
postId: value.postId,
postLink: '/post/' + that.cleanString(value.title) + '/' + value.postId,
title: value.title,
summary: $sce.trustAsHtml(value.summary)
});
});
return posts;
}
});
使用html中的值,如下所示:
<div class="widget fullwidth post-single">
<h4 class="widget-title">Latest</h4>
<div class="widget-content">
<ul>
<li ng-repeat="post in posts">
<h4 class="list-title"><a href="{{post.postLink}}">{{post.title}}</a></h4>
{{post.summary}}
</li>
</ul>
</div>
</div>
以JSON格式来自服务器的数据:
Object { postId="4", title="asdf", summary="<p>asdf</p>"}
但是所有的html标签都在我的页面上打印(就像文本一样)。
在许多SO帖子中,人们建议使用$sce.trustAsHtml
,但它不适用于我。无论如何,请建议解决我的问题。
任何帮助将不胜感激.. !!
答案 0 :(得分:1)
<div ng-bind-html='post.summary'></div>
答案 1 :(得分:0)
您可以通过指令解决此问题。您知道吗,您可以在AngularJS中使用JQuery Lite来操作DOM吗?
这是一个简单的例子:
angular.module("PostsDirective",[])
.directive("posts", function($sce){
return {
link: function($scope, $element, $attrs){
//the HTML you want to show
var post = "<div>hello world</div>";
var posts = [post,post,post,post];
//iterating through the list (_.each is a function from underscore.js)
_.each(posts, function(element){
//if you want to save the trusted html string in a var you can do this with getTrustedHtml
//see the docs
var safeHtml = $sce.getTrustedHtml($sce.trustAsHtml(element));
//and here you can use JQuery Lite. It appends the html string to the DOM
//$element refers to the directive element in the DOM
$element.append(safeHtml);
});
}
};
});
和html
<posts></posts>
这也非常适合HTML代码的可读性。您可以在页面的任何位置使用它。
顺便说一句: 正如我所看到的,您可以直接从REST服务获取HTML元素。为什么不直接获取数据并将其插入ng-repeat?如果您传输所有HTML,如果您有大量数据,则会产生相当高的开销。