Ionic不会将sql数据从工厂返回到控制器

时间:2016-09-23 20:46:20

标签: angularjs sqlite ionic-framework

所以,我创建了一个工厂来查询数据库并返回数据。在方法内部,我可以打印到控制台。但是当我从控制器内部检查返回数据时,它是空的,请查看下面的代码,看看你是否可以提供帮助。

这是工厂

   rs.factory("userService",function($http,$ionicLoading,$cordovaProgress,$cordovaSQLite,$q){
    var user = {};

 /**get user  data */
       user.getData = function(){
      //stores from the local database
       var userData = [];
       var query = "SELECT * FROM users";
      $cordovaSQLite.execute(db, query, []).then(function(res) {

     for (var i=0; i < res.rows.length; i++){
       userData.push(res.rows.item(i));
     }
      console.log("User Data : " + JSON.stringify(userData));//this works

    }, function (err) {
      console.error(err);
    })

     return userData;

};
 return user;

});

控制器:

angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state, $cordovaSQLite,$ionicNavBarDelegate,userService) {

 console.log(userService.getData()); // is empty
})

此处没有任何内容。

1 个答案:

答案 0 :(得分:0)

你需要从成功回复你的承诺中获得userData的第一件事,&amp;之后返回$cordovaSQLLite.execute承诺,以便您可以在控制器

中链接该承诺
user.getData = function() {
  //stores from the local database
  var userData = [];
  var query = "SELECT * FROM users";
  //returning promise
  return $cordovaSQLite.execute(db, query, []).then(function(res) {
    for (var i = 0; i < res.rows.length; i++) {
      userData.push(res.rows.item(i));
    }        
    //return data once user Data created
    return userData;
  }, function(err) {
    console.error(err);
  })
};

然后在控制器内部,你可以通过在该方法上使用.then函数来访问数据

angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state,  $cordovaSQLite,$ionicNavBarDelegate,userService) {
   userService.getData().then(function(userData){
      console.log(userData);
   });
})