我是网络开发的新手。如果这是一个愚蠢的问题,我为此道歉。我的ng-repeat显示的不是从mongodb获取的JSON,但它在我传递本地JSON时有效。我一整天都在努力。谁能告诉我出了什么问题?
这是我的角色代码
(function(){
var app = angular.module('app', ['ngRoute']);
app.controller('CommentController', ['$scope', '$http', function($scope, $http){
//I've tried 'this.comment', it still not work.
//It works when I use a test local JSON'this.comment = [{Visitor: 123, Comment: 345, CreateDate: 879}, {Visitor: 123, Comment: 345, CreateDate: 879}]
$scope.comment =
$http({url: 'db-comments'}).success(function (comments) {
//I've confirmed 'comments' is an array of the JSON objects which I want.
return comments;
});
}]);
})();
这是我的HTML代码
<div id="home" class="container" ng-controller='CommentController as comments'>
<div id="comment" ng-repeat="x in comments.comment">
<h2>{{x.Visitor}}</h2>
<hr>
<p>{{x.Comment}}<p>
<span>{{x.CreateDate}}</span>
<hr>
</div>
</div>
这是我的node.js代码
router.get('/db-comments', function(req, res, next){
Comment.find(function(err, data){
if(err){
console.log('can not fetch the data')
}
res.send(data);
})
});
提前致谢!
答案 0 :(得分:1)
$ http返回一个promise,将你的范围变量设置在'then'部分。
示例:
$http({url: 'db-comments'})
then(function(response) {
$scope.comment = response.data.
}, function(response) {
console.log('error: ' + response.error);
});
答案 1 :(得分:1)
正如scottseeker指出的那样,您需要将http响应数据分配给您的变量,而不是承诺。
但是,因为您使用 控制器作为 语法,所以这还不足以使您的示例正常工作。您需要设置boost::asio::steady_timer
而不是this.comment
。首先,您可能希望编写如下内容:
$scope.comment
但请注意,回调中的关键字$http(...).success(function (comments) {
this.comment = comments; // don't write that
});
并未引用与外部相同的此。因此,如果您使用控制器作为语法,请习惯在控制器的开头编写this
,并在var vm = this;
内设置要绑定到视图的变量(vm
代表 viewmodel )。像那样:
vm
作为旁注,如果您没有为app.controller('CommentController', ['$http', function ($http) {
var vm = this;
$http({url: 'db-comments'}).success(function (comments) {
vm.comment = comments;
});
}]);
电话设置特定标头,我建议您使用简短方法$http
。这更具可读性:
$http.get