0

伙计们,我的应用程序设置如下:

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

4

1 回答 1

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 的数据绑定和消化逻辑应该负责其余的工作。

于 2013-08-29T18:26:59.423 回答