在另一个AngularJS Ionic内召唤一家工厂

时间:2016-01-18 02:10:20

标签: javascript angularjs sqlite ionic-framework

我已经编写了一个离子应用程序,其中包含一个名为Api的工厂,它处理API调用,另一个名为ldb(本地数据库),使用CordovaSqlite插件处理与本地Sqlite数据库的交互。

当我尝试单独使用任何一个工厂时,它们按预期运行,但是当我尝试在Apis函数中使用ldb时,它不会返回数据。

这是我的ldb代码。请注意db在根作用域中定义为sqlite数据库。

.factory('ldb', function($cordovaSQLite) {
  function currentSite(){
    return $cordovaSQLite.execute(db,"SELECT * FROM sites WHERE id=1");
  }

 return{
          current: function(){return currentSite()}
  }
}

这是我的api代码

.factory('api', function($http,config,ldb) {

  function getLastEvent(){

  ldb.currentSite().this(function(res){
    var siteid = res.rows.item(0).siteid;
    var sitepin = res.rows.item(0).sitepin;

  if(siteid != null && sitepin != null){
        $scope.lastEvent = $http.post(config.apiURL, {siteid: siteid, sitepin:   sitepin, action: 'getLastEvent'});
        return true;
     }
  else{ return {"AlertType":"OP","Time":"00:00","Date":"No Site"};}
        return {"AlertType":"OP","Time":"00:00","Date":"No Site"};
    })
  }
return{
 lastEvent: function(){return getLastEvent()}
}

我在这样的控制器中调用api。

app.lastEvent().then(function(res){
  if(res.data == "Invalid Details Provided!"){$scope.lastEvent = {"AlertType":"OP","Time":"Invalid Login","Date":""};}
  else if(res.data != null){ $scope.lastEvent = res.data[0];}
  else{$scope.lastEvent ={"AlertType":"OP","Time":"Error","Date":""}}
})

1 个答案:

答案 0 :(得分:0)

您的代码中存在一些错误: in' api'您写的工厂ldb.currentSite().this(...  而不是ldb.current().then(...

事实上' ldb' factory返回名为current()的函数。

此外,请注意,$cordovaSQLite.execute()是一个异步操作,因此它返回一个方法then()而非this()的承诺。

最后你说db在" root范围中被定义":你的意思是什么?它是$ rootScope的属性?如果是,则必须使用$ rootScope.db引用它。