javascript - 在phonegap中使用indexededDb

标签 javascript angularjs cordova indexeddb

我想使用phonegap构建一个离线应用程序,为此我需要一个本地数据库。我有一个加载我的应用程序的 index.js 文件,其中有一个全局变量。

var db;

我有一个 Controller ,当用户登录时,它会将数据库信息保存在 indexeddb 数据库中,用户可以离线使用它。

 //controller call
 Database.create(res.data.categories);

function Database() {

return {
    create: function (categoryDocs) {
        var request = indexedDB.open("kaldoa", 1);

        request.onsuccess = function (event) {
            db = event.target.result;
            console.log("DB loaded successfully");
        };

        request.onerror = function (event) {
            console.log(event)
        };

        request.onupgradeneeded = function (event) {
            db = event.target.result;
            console.log("DB initiliazed / created");

            //create collections
            db.createObjectStore("categories", {autoIncrement: true});

            //create documents
            var transaction = event.target.transaction;
            var categories = transaction.objectStore("categories");

            //add array objects to document
            categories.add(categoryDocs);

        };

    }
}

}

当我检查 chrome 检查器时,数据库已创建,一切都很好。

现在我想显示存储的命名类别的数据。

我在另一个处理类别的 Controller 中执行此操作。

function categoryCtrl($scope, Category){

Category.browse().onsuccess = function (e) {
    $scope.categories = e.target.result.value;
};

}

我遇到的问题是数据在 Chrome 中可以工作,但在 PhoneGap 中不起作用。在phonegap中我得到这个console.error

Error: undefined is not an object (evaluating 'db.transaction')

此控制台错误与获取类别数据的服务相关

function Category() {

return {
    browse: function () {
        return db.transaction(["categories"], "readonly").objectStore("categories").openCursor()
    }
}
}

我一整天都在绞尽脑汁试图弄清楚为什么它在 chrome 中有效但在 Phonegap 中无效。我知道苹果于2016年9月29日发布的ios 10增加了对safari和webview的支持。

indexeddb ios support

最佳答案

不要使用这样的全局数据库变量。不保证在您访问它时已定义并打开它。这是因为异步代码的工作原理。

关于javascript - 在phonegap中使用indexededDb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40249870/

相关文章:

javascript - 使用 ajax 从服务器获取 React 组件

javascript - NoMethodError(#<Array :0x0000563ea01dba98>): 的未定义方法 `permit'

javascript - 隐藏子元素的 jQuery 更改功能

javascript - 如何检查 Phonegap iOS 中的可用空间?

android - UHF RFID 和 Cordova

javascript - 返回 JavaScript 对象中值的路径

ruby-on-rails - Rails - 为 AngularJS 应用程序包含移动和桌面的不同 Assets ?

javascript - 为什么我的 Controller 方法不可用?

angularjs - ng-bootstrap ngbDropdown 在 Angular 4 中不起作用

Android Studio 和 PhoneGap,模块 android 不受 gradle 支持