我正在尝试从数据库中获取数据并使用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) {
});
&#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;
答案 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并在标记中添加指令后,它工作正常。