我在尝试在定义状态时使用resolve加载视图之前从我的SQLite DB加载数据。
目前:ui-router state
.state("menu", {
templateUrl: "templates/menu.html",
controller: "MenuCtrl",
url: "/menu",
resolve:{
simpleObj: function(){
return {value: 'simple!'};
},
promiseObj: function($cordovaSQLite){
query = "SELECT id FROM reports WHERE progress_status<2";
$cordovaSQLite.execute(db, query, []).then(function(res) {
var pendingList = [];
for (var i = 0; i < res.rows.length; i++) {
pendingList.push(res.rows.item(i).id);
}
return pendingList;
});
}
}
})
控制器
angular.module('starter.controllers').controller('MenuCtrl', function($scope, promiseObj) {
console.log(JSON.stringify(promiseObj));
});
但是这段代码给了我一个无限的消化循环。
我通常在服务中使用数据库执行代码(给出相同的结果)但是为了测试而移动内联
任何人都可以告诉我如何正确地做到这一点吗?
更新
错误信息如下:
02-04 12:07:03.520:D / CordovaLog(7773):file:///android_asset/www/lib/ionic/js/ionic.bundle.js:第19387行:错误:[$ rootScope:infdig ]达到10 $ digest()次迭代。中止!
02-04 12:07:03.520:D / CordovaLog(7773):观察者在最近5次迭代中被解雇:[]
02-04 12:07:03.520:D / CordovaLog(7773):http://errors.angularjs.org/1.3.6/ $ rootScope / infdig?p0 = 10&amp; p1 =%5B%5D
答案 0 :(得分:0)
您应该从您的服务中退回承诺&amp;然后你可以在控制器内访问它。在UI-Router DOCS
中解决承诺promiseObj: function($cordovaSQLite, $q) {
var deferred = $q.defer();
query = "SELECT id FROM reports WHERE progress_status<2";
$cordovaSQLite.execute(db, query, []).then(function(res) {
var pendingList = [];
for (var i = 0; i < res.rows.length; i++) {
pendingList.push(res.rows.item(i).id);
}
deferred.resolve(pendingList);
});
return deferred.promise;
}
<强>控制器强>
angular.module('starter.controllers').controller('MenuCtrl', function($scope, promiseObj) {
//here the promise get available
$scope.promiseObj = promiseObj;
$scope.promiseObj.then(function(data){
$scope.pendingList = data; //get pending here
});
});
这对你有帮助。感谢。
答案 1 :(得分:0)
如果您的应用程序中发生任何错误,可能会发生这种情况(在我的情况下,我对angularfire有依赖。但我忘了将firebase.js包含在我的应用程序中)。 由于您使用的是resolve,因此您将看不到实际的错误,并且您将获得此无限摘要错误。
根据我的经验,我猜你的应用程序中存在一些错误,导致无法执行解析。