使用ngCordova $ cordovaSQLite插件与Ionic的错误

我目前正试图用我的应用程序实现ngCordova SQLite插件,但尚未产生一个工作的解决scheme。 我跟着Nic Raboy的博客文章 ,介绍如何用你的Ionic项目实现SQLite插件为“T”,但我仍然收到错误: 错误:undefined不是一个对象(评估'$ window.sqlitePlugin.openDatabase')当我尝试在iOS模拟器中运行应用程序时。

我也证实ngCordova和插件已经加载到我的项目中。

这是我的脚本如何加载到我的项目中的顺序:

<script src="lib/ionic/js/ionic.bundle.js"></script> <script src="lib/ngCordova/dist/ng-cordova.js"></script> <script src="cordova.js"></script> <script src="js/app.js"></script> <script src="js/controllers.js"></script> 

我的代码如下。

app.js

 angular.module('whoPaidLast', ['ionic', 'ngCordova', 'whoPaidLast.controllers', 'whoPaidLast.services']) .run(function($ionicPlatform, $cordovaSQLite) { $ionicPlatform.ready(function() { if(window.cordova && window.cordova.plugins.Keyboard) { cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true); } if(window.StatusBar) { StatusBar.styleDefault(); } db = $cordovaSQLite.openDB({ name: 'accounts.db' }); $cordovaSQLite.execute(db, 'CREATE TABLE IF NOT EXISTS accounts (id integer primary key autoincrement, firstname text, lastname text, paid numeric, date text)'); }); }) 

controllers.js

 angular.module('whoPaidLast.controllers', []) .controller('DashCtrl', ['$ionicPlatform', '$scope', '$ionicModal', '$ionicActionSheet', '$cordovaSQLite', function ($ionicPlatform, $scope, $ionicModal, $ionicActionSheet, $cordovaSQLite) { $scope.getList = function() { var query = 'SELECT id, firstname, lastname, paid, date FROM accounts ORDER BY lastname ASC'; var db = $cordovaSQLite.openDB({ name: 'accounts.db' }); $ionicPlatform.ready(function() { $cordovaSQLite.execute(db, query, [id, firstname, lastname, paid, date]).then(function(result) { if(result.rows.length > 0) { console.log('rows =' + result.rows); } else { $scope.results = []; } }, function(error) { console.error(err); }); }); }; }); 

任何信息或帮助,你可能会有所帮助。 提前感谢。

就像Nic Raboy所说的那样,尽pipe文档已经说了,ngCordova SQLite openDB调用的语法已经改变了,如下所示:

 db = $cordovaSQLite.openDB( databasename, databaseType ); 

第二个参数databaseType是数据库的存储方式。 在我的情况下,我用数字用来存储数据库隐藏在iTunes的背景,但备份与iCloud。

通过改变这个调用的语法,这解决了我的错误。

注意:如果您尝试在浏览器中工作,则此打开的数据库调用将会出错。 要解决这个问题,您需要引入一个“if”语句来根据您的环境更改呼叫。 以下为我工作:

 if (window.cordova && window.SQLitePlugin) { var db = $cordovaSQLite.openDB( 'accounts.db', 1 ); } else { db = window.openDatabase('accounts', '1.0', 'accounts.db', 100 * 1024 * 1024); } 

我花了超过半天的时间来解决这个问题。在我的情况下,我把我的项目从以前的离子版本更新到了更新的版本。但问题是我复制了www文件夹,但是没有再添加sqlite插件。

所以我所要解决的是:

 cordova plugin add cordova-sqlite-storage 

我不知道你是否find答案。 我有许多问题,比configuration正确的项目。

  • 一个问题可能是你应该导入最后一件事ng-cordova.js然后cordova.js。 app.js和controller.js应该先导入。

  • 如果你正在运行一个networking应用程序可能有一个问题,cordova就绪参数,不会永远不会准备好,所以数据库将不会打开。

  • 尝试Triccum所说的新呼叫。

我不记得更多的问题。