使用MongoDB的AngularJS,数据从数据库中提取,但不能用ng-repeat显示

时间:2015-01-06 22:01:08

标签: angularjs html5 mongodb mongoose

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

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

&#13;
&#13;
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) {

});
&#13;
<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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

您无法将工厂作为控制器运行

在您的控制器中执行类似

的操作
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。

我希望这会有所帮助。

答案 1 :(得分:0)

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