Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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
ionic:我有一个字符串化json中的作用域变量为空_Json_Angularjs_Sqlite_Filter_Ionic - Fatal编程技术网

ionic:我有一个字符串化json中的作用域变量为空

ionic:我有一个字符串化json中的作用域变量为空,json,angularjs,sqlite,filter,ionic,Json,Angularjs,Sqlite,Filter,Ionic,我试图从SQLite查询中过滤JSON结果。当我直接使用JSON时,过滤器工作,但当我使用来自服务的查询时,它不工作。然后,$scope.arrayme就显示为空 错误在哪里?谢谢大家! 这是服务: getSubtipos: function() { var query = "SELECT subtipos.idsubtipo, subtipos.tipos_idtipo, subtipos.nombre, subtipos.icon, subtipos.val FROM subtipo

我试图从SQLite查询中过滤JSON结果。当我直接使用JSON时,过滤器工作,但当我使用来自服务的查询时,它不工作。然后,$scope.arrayme就显示为空

错误在哪里?谢谢大家!

这是服务:

getSubtipos: function() {
    var query = "SELECT subtipos.idsubtipo, subtipos.tipos_idtipo, subtipos.nombre, subtipos.icon, subtipos.val FROM subtipos";
    var arraySubtipos = [];
    $cordovaSQLite.execute(db, query, []).then(function(res) {
        if(res.rows.length > 0) {
            for(var i = 0; i < res.rows.length; i++) {
                arraySubtipos.push(res.rows.item(i));
            }
        } else {
            console.log("No results found");
        }
    }, function (err) {
        console.error("ERROR: " + err.message);
    }).finally(function() {
        arraySubtipos =  JSON.stringify(arraySubtipos);
    });
        return arraySubtipos;
    }
这就是国家:

.state('app.menusubtipos', {
    url: "/menusubtipos/:foo",
    views: {
        'menuContent': {
            templateUrl: "templates/menuSubtipos.html",
            controller: "MenuSubtiposCtrl"
        }
   }
})

可能会出现比我立即注意到的问题更多的问题,但我已经注意到,在设置
getSubtipos
函数之前,您正在返回一个变量

$cordovaSQL.execute()
函数是一个异步函数。因此,您将在设置前返回
arraySubtipos

更好的方法是在
getSubtipos
中执行以下操作:

var arraySubtipos = [];
return $q.when($cordovaSQLite.execute(db, query, [])
    .then(function(res) {
        if(res.rows.length > 0) {
            for(var i = 0; i < res.rows.length; i++) {
                arraySubtipos.push(res.rows.item(i));
            }
        } else {
            console.log("No results found");
        }
        return JSON.stringify(arraySubtipos);
    }));
.controller('MenuSubtiposCtrl', function($scope, $filter, miJson, $stateParams, $cordovaSQLite){
    miJson.getSubtipos()
        .then(function(arrayMe) {
            // No need to stringify it again
            $scope.arrayme = $filter("filter")(JSON.parse(arrayme), {tipos_idtipo: $stateParams.foo});
        })
        .catch(function(error) {
            // Handle the error here
        });
    var arrayme = JSON.stringify(miJson.getSubtipos());
});

我对您使用JSON.stringify和JSON.parse也有点怀疑。很可能不需要它们,但在不知道数据格式的情况下,我将其保留原样。

您是否收到任何抛出的错误消息?另外,
miJson.getSubtipos()
的值是什么?我在返回之前放了一个console.log,它给出[{“val”:0,“nombre”:“Todo Tipo de Cocina”,“icon”:“icon-svg52”,“idsubtipo”:1,“tipos_idtipo”:1},{“val”:0,“nombre”:“Tapas”,“icon”:“icon-svg44”,“idsubtipo”:2,“tipos idtipo”:1},{“val”:0…..但它在控制器中给出了一个错误:TypeError:无法读取未定义的属性'then'。但是,错误出现在json登录之前。我猜这是因为
$cordovaSQLite
没有像我预期的那样返回承诺。我编辑了我的响应,将调用包装在
$q中。当
时。试试看。很好,您的添加内容成功了!非常感谢!
.controller('MenuSubtiposCtrl', function($scope, $filter, miJson, $stateParams, $cordovaSQLite){
    miJson.getSubtipos()
        .then(function(arrayMe) {
            // No need to stringify it again
            $scope.arrayme = $filter("filter")(JSON.parse(arrayme), {tipos_idtipo: $stateParams.foo});
        })
        .catch(function(error) {
            // Handle the error here
        });
    var arrayme = JSON.stringify(miJson.getSubtipos());
});