ionic:我有一个字符串化json中的作用域变量为空
我试图从SQLite查询中过滤JSON结果。当我直接使用JSON时,过滤器工作,但当我使用来自服务的查询时,它不工作。然后,$scope.arrayme就显示为空 错误在哪里?谢谢大家! 这是服务: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
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());
});