2016-03-15 43 views
0

在我的离子应用程序。我创建了一个服务名为webservice使用angularjs.sqlite数据库检索数据。它正确选择数据并获得结果在控制台它工作正常,但它总是返回undefinedSqlite - 无法返回选定的数据angularjs服务

这是我的示例代码:

app.factory('webservice',function($http,$cordovaSQLite,$q){ 

    var obj = {}; 

    obj.getNote = function(){ 
     var query = "SELECT subject, note FROM notes"; 
     var q = $q.defer(); 
     $cordovaSQLite.execute(db, query).then(function(res) { 
      if(res.rows.length > 0) {    
       var data = res.rows; 
       console.log(data); //Result - Working.. 
       q.resolve(res.rows); //Result - Undefined.. 
       return data; //Result - Undefined.. 
      } else { 
       console.log("No results found"); 
       return false; 
      } 
     }, function (err) { 
      console.error(err); 
     }); 
    } 

    return obj; 

}); 

这是我的控制器:

app.controller('noteCtrl', function($scope,$state,webservice){ 

    $scope.getNote = function(){ 
     console.log(webservice.getNote()); // Undefined. 
    } 

}); 

所以请尽量找出好的解决办法我。

谢谢!

回答

4

两件事。首先,您不会从您的服务中返回承诺对象,其次,您没有在控制器中调用then函数。试试下面的代码:

app.factory('webservice',function($http,$cordovaSQLite,$q){ 

    var obj = {}; 

    obj.getNote = function(){ 
     var query = "SELECT subject, note FROM notes"; 
     var q = $q.defer(); //this is your deferred object 
     $cordovaSQLite.execute(db, query).then(function(res) { 
      if(res.rows.length > 0) {    
       var data = res.rows; 
       console.log(data); //Result - Working.. 
       q.resolve(res.rows); //Result - Undefined.. 
       return data; //Result - Undefined.. 
      } else { 
       console.log("No results found"); 
       q.reject("No results found"); 
       return false; 
      } 
     }, function (err) { 
      q.reject(err); 
      console.error(err); 
     }); 

     return q.promise;  //This line was missing 

    } 

    return obj; 

}); 

和控制器做到这一点:

app.controller('noteCtrl', function($scope,$state,webservice){ 

    $scope.getNote = function(){ 
     webservice.getNote().then(
      function(res){ //success callback 
      console.log(res); //this should be the resolved object 
      }, 
      function(err){ //error callback 
      console.log(err); //this should be the rejected object 
      }); 
    } 

}); 
+1

谢谢你,它的工作原理。但是当我在视图中使用ng-repeat时,我得到了下面的错误[$ rootScope:infdig] 10 $ digest()迭代达到了。 “请你告诉我如何解决这个问题? –