2015-11-29 109 views
0

我有以下两种方法getP和getPage,getP从数据库获取数据$资源并设置$ scope.mydata从输出,我需要在其他方法使用此输出getPage所以我打电话这两个方法在位指示,

的万阿英,蒋达清我不能得到在第二种方法的数据,执行console.log($ scope.mydata)获得空

 $scope.mydata={}; 
     var sasa; 
     var page=0; var size=100; 

    $scope.getP = function() { 
      sasa=$resource('api/testrecordajaxs/:page/:size', { 
       page : page, 
       size : size 
      }).query(); 
      $scope.mydata=sasa; 
      }; 

      var getPage = function() { 
       console.log($scope.mydata) //get null 
       var firstRow = (paginationOptions.pageNumber - 1) * paginationOptions.pageSize; 
       $scope.gridOptions.data = $scope.mydata.slice(firstRow, firstRow + paginationOptions.pageSize); 
      }; 


      $scope.getP(); 
      getPage(); 
+0

Ofcourse它还没有定义,你不等待数据从'$ resource'返回。另外,你定义'sasa'的方式看起来有点不对。阅读关于如何使用'$ resource'和'promises'的角度。 – Arg0n

回答

0

您应该使用的承诺(注意函数返回getP诺) :

$scope.mydata = {}; 
var sasa; 
var page = 0; 
var size = 100; 

$scope.getP = function() { 
    return $resource('api/testrecordajaxs/:page/:size', { 
    page: page, 
    size: size 
    }).query().then(function(data) { 
    $scope.mydata = data; 
    return data; 
    }); 
}; 

var getPage = function(data) { 
    console.log($scope.mydata) // you can use data also 
    var firstRow = (paginationOptions.pageNumber - 1) * paginationOptions.pageSize; 
    $scope.gridOptions.data = $scope.mydata.slice(firstRow, firstRow + paginationOptions.pageSize); 
}; 
$scope.getP().then(getPage); 
+0

我做了你的改变,但得到这个错误$资源(...)。查询(...)。然后不是一个函数 –

+0

我刚刚复制你的代码示例和“promisified”。所以如果之前有一个函数'query',那么它应该在变化之后。检查你的代码。 –

+0

在老版本的Angular中,'.success()'是你解决承诺时的方式。在更新的版本中,它被改为'.then()'来镜像标准的promise规范。 – rummik

0

我应该等待数据来自服务器重新再使用它,所以在

$scope.gridOptions.data = data.slice(firstRow, firstRow + paginationOptions.pageSize); 

使用数据之前,我用

 data.$promise.then(function(result) 

所以这个代码工作正常我

  var page=0; var size=100; 

      var getData=$resource('api/testrecordajaxs/:page/:size', { 
       page : '@page', 
       size : '@size' 
      }); 

      function getPage() { 
      var data=getData.query({page:page,size:size}); 
       data.$promise.then(function(result) { 
       var firstRow = (paginationOptions.pageNumber - 1) * paginationOptions.pageSize; 
       $scope.gridOptions.data = data.slice(firstRow, firstRow + paginationOptions.pageSize); 
      }); 
      } 
      getPage(); 
+0

我做了类似的事情,但$ scope.variable仍然没有被设置在承诺之外 –