Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite-无法返回所选数据angularjs服务_Angularjs_Sqlite_Ionic Framework - Fatal编程技术网

Sqlite-无法返回所选数据angularjs服务

Sqlite-无法返回所选数据angularjs服务,angularjs,sqlite,ionic-framework,Angularjs,Sqlite,Ionic Framework,在我的爱奥尼亚应用程序中。我创建了一个名为webservice的服务,使用angularjs从sqlite数据库检索数据。它正确选择数据并在控制台中获得结果,工作正常,但总是返回未定义的 这是我的示例代码: app.factory('webservice',function($http,$cordovaSQLite,$q){ var obj = {}; obj.getNote = function(){ var query = "SELECT subject

在我的爱奥尼亚应用程序中。我创建了一个名为webservice的服务,使用angularjs从sqlite数据库检索数据。它正确选择数据并在控制台中获得结果,工作正常,但总是返回未定义的

这是我的示例代码:

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.
    }

});
这是我的控制器:

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.
    }

});
所以请尝试为我找到好的解决方案


谢谢大家!

两件事。首先,您没有从服务返回承诺对象,其次,您没有在控制器中调用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
            });
    }

});

两件事。首先,您没有从服务返回承诺对象,其次,您没有在控制器中调用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
            });
    }

});

谢谢,它很有效。但是当我在视图中使用ng repeat时,我得到了以下错误
[$rootScope:infdig]10$digest()迭代。流产您能告诉我如何修复此问题吗?谢谢,它可以正常工作。但是当我在视图中使用ng repeat时,我得到了以下错误
[$rootScope:infdig]10$digest()迭代。流产