首页 文章

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

提问于
浏览
0

我编写了一个带有两个工厂的离子应用程序,一个名为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

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

    实际上'ldb'工厂返回一个名为 current() 的函数 .

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

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

相关问题