我想知道是否有可能通过ngRepeat模板中的angular方法调用返回数据库结果。以下是我的模板:
<div class="article-right" ng-repeat="localNews in allLocalNews | limitTo:5">
<div class="article-title">
<p>
On {{localNews.dte | date}}
<a>Number of comment: {{getNumberOfComment(localNews.id)}} </a>
</p>
</div>
这是我的控制器,在我的控制器中,我有一个方法,它接受ngRepeat中结果的每个id值,以便从数据库中获取评论的数量
$scope.getNumberOfComment = function(id){
var cObj = {id:id}; //get a news number of comments
return $http.post("shared/search/getNumberOfComment.cln.php",cObj).success(function(response){
if(response != "failed"){
return response;
}
}).error(function (response, status) {
console.log(response);
});
}
这个脚本使我的浏览器在进入循环时冻结。任何帮助都将受到高度的感谢。
发布于 2017-08-25 04:57:08
它可能会循环,因为每个摘要周期都会重新调用以获取信息。最好让每个项目都填充一个变量,并在每个元素上调用ng-init之类的东西,这些元素只会被调用一次来初始化项目变量。这有意义吗?
例如
<div class="article-right" ng-repeat="localNews in allLocalNews | limitTo:5">
<div class="article-title">
<p>
On {{localNews.dte | date}}
<a ng-init=getNumberOfComment(localNews.id, localNews)>Number of comment: {{localNews.myVar}} </a>
</p>
</div>
$scope.getNumberOfComment = function(id, localNews){
var cObj = {id:id}; //get a news number of comments
return $http.post("shared/search/getNumberOfComment.cln.php",cObj).success(function(response){
if(response === "passed"){
localNews.myVar = response;
}
}).error(function (response, status) {
console.log(response);
});
}
发布于 2017-08-25 10:21:55
解决方案很简单,在控制器初始化上使用get
调用来获取所有注释数据。然后在这个集合上使用ng-repeat iterate,只显示您想要作为正确的新闻id的那些数据。如果你只想要一些评论,这是一个例子,它没有经过测试,但你应该明白了。它要求您准备API端点以返回所有注释。
function CommentsController() {
var vm = this;
vm.comments = [];
getComments();
function getComments() {
$http.get("your/api/getComments.cln.php").success(function(r){
vm.comments = r;
}
}
function getNumberOfComment(newsId) {
return vm.comments.filter(function(comment){
return comment.news_id === newsId;
}).length;
}
}
<div class="article-right" ng-repeat="localNews in allLocalNews | limitTo:5">
<div class="article-title">
<p>
On {{localNews.dte | date}}
<a>Number of comment: {{$ctrl.getNumberOfComment(localNews.id)}} </a>
</p>
</div>
https://stackoverflow.com/questions/45866629
复制相似问题