这是我确定导致问题的代码部分:
angular.module('starter.controllers', []).controller('StudentsCtrl', function ($scope, $cordovaSQLite) {
var query = "SELECT id, student_id, username FROM students";
var users = [];
$cordovaSQLite.execute(db, query).then(function (data) {
$.each(data, function(i, item) {
users.push(item);
});
});
$scope.users = users;
});
我已将$cordovaSQLite
的必要文件包含在内。以上代码位于www/js/controllers.js
内,作为默认Ionic选项卡项目的一部分。 $cordovaSQLite
在www/js/app.js
内工作得很好,并且在www/js/controllers.js
的另一部分也可以正常工作,但上面的代码部分会返回此错误:
0 610246 error Error: undefined is not an object (evaluating 'n.transaction')
更新:此功能中$cordovaSQLite
似乎等于undefined
,但我不确定为什么会发生这种情况。
答案 0 :(得分:1)
您的代码在Cordova deviceready事件触发之前正在运行。在使用任何设备功能(如插件)之前,您需要等待它。在Ionic中,如果你在控制器中使用$ ionicPlatform,你可以这样做:
$ionicPlatform.ready(function() {
作为一种包装需要等待的代码的方法。试试这个:
angular.module('starter.controllers', []).controller('StudentsCtrl,$ionicPlatform', function ($scope, $cordovaSQLite) {
$ionicPlatform.ready(function() {
var query = "SELECT id, student_id, username FROM students";
var users = [];
$cordovaSQLite.execute(db, query).then(function (data) {
$.each(data, function(i, item) {
users.push(item);
});
});
$scope.users = users;
});
});