TypeError:无法读取未定义的属性“openDatabase”

时间:2015-01-30 20:46:14

标签: sqlite cordova

我想第一次使用带有cordova框架的sqlite。正如我在教程中读到的那样,我应该像这样使用ngcordova:

var db = null;
app.controller('mainCtrl', function ($scope, $ionicSideMenuDelegate) {
    $scope.toggleLeft = function () {
        $ionicSideMenuDelegate.toggleLeft();
    }
    $scope.toggleRight = function () {
        $ionicSideMenuDelegate.toggleRight();
    }
})
.controller('home_ctrl', function ($scope, $cordovaSQLite) {
    db = $cordovaSQLite.openDB({name: "my.db"});
        //db = $window.opendb({name: "my.db"});
        $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS people(id integer primary key, firstname text, lastname text)")
})
;

当我运行此代码时出现错误:

TypeError: Cannot read property 'openDatabase' of undefined

在某些文章中:How do I use the ngCordova sqlite service and the Cordova-SQLitePlugin with Ionic Framework? 建议使用如下命令:ionic start myApp sidemenu
我不知道它是什么,我只使用cordova命令:cordova run androidcordova create my_project
我应该怎么做才能从我的cordova项目中创建一个表?

2 个答案:

答案 0 :(得分:48)

您可以查看本教程:

https://www.thepolyglotdeveloper.com/2014/11/use-sqlite-instead-local-storage-ionic-framework/

当您看到此错误时:

TypeError: Cannot read property 'openDatabase' of undefined

这是因为以下几个原因之一:

  1. 您没有将$cordovaSQLite方法包裹在$ionicPlatform.ready()函数中。
  2. 您正尝试从网络浏览器测试此原生插件。
  3. 您实际上没有将基础SQLite插件安装到项目中。
  4. 此错误的最常见原因是#1和#2。必须在确认应用程序就绪后才能使用本机插件,因此必须使用$ionicPlatform.ready()方法。由于本机插件使用本机代码,因此无法通过Web浏览器对其进行测试。

    阅读我链接的教程,因为它可以帮助您。

    此致

答案 1 :(得分:0)

实际上,我打开了一个旧项目,并且仅当我使用-cls运行该项目时,才出现此错误(因为使用了liverelaod)。但是我有一个小错误可以修复,所以我没有做太多调查(只是不使用livereload就可以修复)。但是也许这个小提示对某人有帮助。