AngularJS 与 MongoDB,从数据库中提取数据,但无法使用 ng-repeat 显示

Posted

技术标签:

【中文标题】AngularJS 与 MongoDB,从数据库中提取数据,但无法使用 ng-repeat 显示【英文标题】:AngularJS with MongoDB, data is pulled from database, but cannot display with ng-repeat 【发布时间】:2015-03-04 16:02:43 【问题描述】:

我正在尝试从数据库中获取数据并使用ng-repeat 显示它。工厂的getAll 函数可以正常工作,我得到一个包含所有数据的对象,但它没有正确显示。在表中,我只得到第一个索引,后面什么都没有。

如果我尝试使用for(i = 0 ; i < DataService.persons.length ; i++),它可以正常工作,但我不能将它与 ng-repeat 一起使用。

var testReactie = angular.module('testReactie', ['ngRoute']);

testReactie.config(function($routeProvider) 
   $routeProvider

       .when('/', 
        templateUrl : 'instructiuni.ejs'

       )
       .when('/form', 
        templateUrl : 'form.ejs',
        controller : 'formContr'
       )
       .when('/test', 
        templateUrl : 'joc.ejs',
        controller : 'gameContr'
       )
       .when('/stat', 
        templateUrl : 'scoruri.ejs',
        controller : 'statContr',
        resolve: 
            postPromise:['DataService', function(DataService)
                return DataService.getAll();
            ]
        
       );
    
);


testReactie.factory('DataService', ['$http', function($http) 
    var o = 
        persons:[],
        person:
    ;
    
    o.getAll = function()
        
      return $http.get('/db').success(function(data)
        o.persons = data;
        
      );  
    ;

    o.create = function() 
      return $http.post('/db', o.person).success(function(data)
        o.persons.push(data);
      );
    ;
    
    return o;
]);

testReactie.controller('mainContr',function($scope) 
    
);

testReactie.controller('statContr',function($scope, DataService) 

);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
    <h2>Scoruri</h2>

    <table class="table">
        <thead>
            <tr>
                <th>Nr.</th>
                <th>Sex</th>
                <th>Varsta</th>
                <th>Timp Mediu</th>
            </tr>
        </thead>
        <tbody>
            
            <div ng-repeat = "pers in DataService.persons">
                <tr>
                    <td>$index + 1</td>
                    <td>pers.sex</td>
                    <td>pers.varsta</td>
                    <td>pers.timp</td>
                </tr>
            </div>
            
        </tbody>
    </table>
    
</div>

【问题讨论】:

【参考方案1】:

您不能将工厂作为控制器运行

在您的控制器中执行类似的操作

testReactie.controller('mainContr', ['DataService', '$scope', function(DataService, $scope) 
    DataService.getAll().then(function(successData) // a promise helps you do something when it's resolved
        $scope.awesomeData = successData;
    
);

改变你的工厂的一切,就像

o.getAll = function()
    var promise = $q.defer(); // the $q helps create a promise

      return $http.get('/db').success(function(data)
            promise.resolve(data); // promise returns data when resolved
      );  
return promise; // returns a promise
;

你的模板应该是

<div ng-repeat = "pers in awesomeData">

这是因为当你在你的模板中有它时,它会自动调用 $scope.awesomeData。因此,当您拥有 DataService 时,它​​正在调用未定义的 $scope.DataService。

我希望这会有所帮助。

【讨论】:

【参考方案2】:

我解决了这个问题。它来自 html。我在 div 中添加了 ng-repeat 指令,它打破了表格。删除 div 并在标签中添加指令后,它工作正常。

【讨论】:

以上是关于AngularJS 与 MongoDB,从数据库中提取数据,但无法使用 ng-repeat 显示的主要内容,如果未能解决你的问题,请参考以下文章

使用Angularjs和nodejs进行Mongodb CRUD操作-如果数据已经存在,如何从数据库中获取消息?

如何将 mongodb 数据从服务器(node.js)检索到我的 AngularJS 路由

如何使用 mongoose 从 mongodb 中选择值

在 AngularJS 中使用数据库 - 我应该在哪里编写数据库连接代码?

如何在 Mongoose 中更新/更新文档/数据? Passport MongoDB、Express、AngularJS、Nodejs

使用 AngularJS 跟踪和计算点击次数并发布到 MongoDB