Angular ng-repeat不适用于从mongodb获取的数据

时间:2015-09-18 18:41:19

标签: javascript angularjs node.js mongodb ng-repeat

我是网络开发的新手。如果这是一个愚蠢的问题,我为此道歉。我的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);
  })
});

提前致谢!

2 个答案:

答案 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