角度资源计时问题

时间:2013-08-29 18:18:02

标签: angularjs

我有我的应用程序设置如下:

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永远不会被渲染。资源运作正常。它确实返回数据,但我觉得这是一个时间问题,但我不知道如何解决它。

1 个答案:

答案 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的数据绑定和消化逻辑应该处理其余部分。