2017-03-23 52 views
1

我遇到了AngularJS和MongoDb的交互问题。 我在服务器端使用NodeJS和ExpressJS。我用Mongoose跟Mongo说话。 我刚刚完成了路线。AngularJS显示MongoDB数据

index.js

 app.get('/api/dashboard', function (req, res) { 

    Homepage 
     .find({}, 'title -_id createdBy allbids.bid endTime') 
     .exec(function (err, auctions) { 
      if(err) 
       res.send(err); 
      console.log(auctions); 
      res.json(auctions); 
     }) 
}); 

控制台显示我需要的所有领域。

然后我通过前端。我用角路线是这样的:

 var app = angular.module('auction', [ 'ngRoute','HomeCtrl','NewAuctionCtrl', 'FollowingAuctionsCtrl', 'MyAuctionsCtrl']); 


     app.config(function ($routeProvider, $locationProvider) 
{ 

$routeProvider 

.when('/', { 
    templateUrl: 'views/partials/dashboard.html', 
    controller: 'HomeController' 
}) 



$locationProvider.html5Mode(true); 


}); 

而且我的HomeController是这样的:

angular.module('HomeCtrl', []) 
    .controller('HomeController',function ($scope, $http) { 
 $http.get('/api/dashboard').then(function(data) { 
     console.log(data); 
     $scope.auctions= data; 

    }) 
    }); 

在dashboard.html

  <div class="panel panel-default" ng-controller="HomeController"> 
<div class="panel-heading">All The Auctions</div> 
<div class="panel-body"> 
    <ul class="list-group"> 
     <li class="list-group-item" ng-repeat="auction in HomeController.auctions"> 
      {{auction}} 
     </li> 
    </ul> 
</div> 

它不工作。我只需要使用{{auction.title}}而不是{{auction}} ??

+0

更改为“拍卖中的拍卖”。在使用$ scope时,您不需要引用控制器。 编辑:然后像你评论得到像{{auction.title}}标题。 – Mickers

回答

2

假设你的数据被成功地从服务器获取,你可以做

<div class="panel panel-default" ng-controller="HomeController"> 
    <div class="panel-heading">All The Auctions</div> 
    <div class="panel-body"> 
     <ul class="list-group"> 
     <li class="list-group-item" ng-repeat="auction in auctions"> 
      {{auction}} 
     </li> 
    </ul> 
    </div> 
</div> 

它并不需要是HomeController.auctions。这将使整个拍卖标的成li,所以这取决于你正在试图做的,你可能要像做{{auction.title}}正如你所提到

+0

我做了你如何说,但它不工作。使用{{auction.title}},它不会向我显示任何内容,{{auction}}向我展示了一个包含5个元素的数组,其中1个数据,所有这些数据都重叠显示,其他数据是状态代码以及我不知道 – mpeg90

+0

在你的控制器中,你可能需要做$ scope.auctions = data.data;而不是仅仅是$ scope。拍卖=数据; –

0

既然你有申报覆盖你outtest <div>使用HomeController的是什么标题和ui,li,该区域将自动绑定HomeController中的$ scope。

所以只需使用{{auction in auctions}}。如果您有其他$范围像HomeController中$scope.foo = "foo",你可以尝试<div>{{foo}}</div><div ng-controller="HomeController"里面的想法

我不知道,如果你想与模块分离,您的拍卖模块注入它,有.config()或者如果您只需要HomeController作为动作的模块中的控制器之一。

如果你的意图是第二个,我建议使用var app = angular.module('auction',['ngRoute']).config(bla bla)

在HomeController中,使用angular.module('auction').controller('HomeController',function ($scope, $http) { bla bla })所以你不必注入新的控制器每次创建新的控制器

希望它可以帮助