在 phonegap 中使用 indexedDb
Using indexededDb in phonegap
我想使用 phonegap 构建一个离线应用程序,为此我需要一个本地数据库。我有一个加载我的应用程序的 index.js 文件,其中有一个全局变量。
var db;
我有一个控制器,当用户登录时,它会将数据库信息保存在 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 检查器时,数据库已经创建,一切正常。
现在我想显示存储的命名类别的数据。
我在另一个处理类别的控制器中执行此操作。
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 中不起作用。我知道 ios 10 于 2016 年 9 月 29 日发布,苹果添加了对 safari 和 webview 的支持。
不要像这样使用全局数据库变量。不能保证在您访问它时定义和打开它。这是因为异步代码的工作方式。
我想使用 phonegap 构建一个离线应用程序,为此我需要一个本地数据库。我有一个加载我的应用程序的 index.js 文件,其中有一个全局变量。
var db;
我有一个控制器,当用户登录时,它会将数据库信息保存在 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 检查器时,数据库已经创建,一切正常。
现在我想显示存储的命名类别的数据。
我在另一个处理类别的控制器中执行此操作。
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 中不起作用。我知道 ios 10 于 2016 年 9 月 29 日发布,苹果添加了对 safari 和 webview 的支持。
不要像这样使用全局数据库变量。不能保证在您访问它时定义和打开它。这是因为异步代码的工作方式。