我有我的应用程序设置如下:
var myApp = angular.module('app', []);
myApp.factory('MotorList', ['$resource', function($resource) {
return $resource(baseURL + 'MotorList.json', {}, {} );
}]);
myApp.factory('MotorDataManager', function(MotorList) {
var List;
MotorList.query().$then(function(value){
List = value.data;
})
return {
getFullList: function() {
return List;
}
anotherFunction: function { ... }
}
});
myApp.controller('MainCtrl', function($scope,MotorDataManager){
$scope.tableData = MotorDataManager.getFullList();
})
在我的前端,我有一个循环通过$ scope.tableData的ng-repeat。 但是我面临的问题是$ scope.tableData永远不会被渲染。资源运作正常。它确实返回数据,但我觉得这是一个时间问题,但我不知道如何解决它。
答案 0 :(得分:0)
当然,这是一个时间问题。当您致电MotorDataManager.getFullList()
时,您将获得undefined
,因为设置它的回调永远不会被设置。因此,$scope.tableData
未定义。
您需要$scope.tableData
来引用变更的内容。这是一种方法:
myApp.factory('MotorDataManager', function(MotorList) {
var list = [];
MotorList.query().$then(function(value){
angular.forEach(value, function(item) {
list.push(item);
});
});
return {
getFullList: function() {
return list;
}
}
});
myApp.controller('MainCtrl', function($scope,MotorDataManager){
$scope.tableData = MotorDataManager.getFullList();
});
在此示例中,您现在返回一个数组,因此首先,$scope.tableData
将是一个空数组。但那没关系,因为你现在有了一些东西的参考。当$resource
返回时,它将填充数组(这是相同的引用),因此您的控制器现在将具有填充的数组。 Angular的数据绑定和消化逻辑应该处理其余部分。