一、在main.js中引用indexDb
import Vue from 'vue'
import indexDb from './api/indexDb'
let storeName = { index: ['tableView'], name: 'tableView', key: 'menuid' }
indexDb.openDB('spreadTableView', 1, storeName, function(db){
Vue.prototype.$tableDb = db
})
2、操作数据库方法
...
<script>
import indexDb from './api/indexDb'
...
export default {
...
mounted(){
let list = [{...}]
let allDbData = indexDb.getAllData(this.$tableDb, 'tableView')
let flagIndex = indexDb.readAllData(this.$tableDb, list)
if(flagIndex == -1){
indexDb.addData(this.$tableDb, 'tableView', list)
}else{
indexDb.updateData(this.$tableDb, 'tableView', list)
}
}
...
}
</script>
3、封装indexDb.js
export default {
indexedDB: window.indexedDB || window.webkitindexedDB || window.msIndexedDB || window.mozIndexedDB,
openDB(dbname, version, newStore, callback) {
let db
version = version || 1;
const request = this.indexedDB.open(dbname, version);
request.onerror = function () {
console.log('IndexedDB数据库打开错误');
};
request.onsuccess = function (event) {
db = event.target.result;
if (callback && (typeof callback === 'function')) {
callback(db);
}
};
request.onupgradeneeded = function (event) {
db = event.target.result;
if (newStore) {
if (!db.objectStoreNames.contains(newStore.name)) {
const objectStore = db.createObjectStore(newStore.name, {
keyPath: newStore.key,
});
newStore.index.forEach(item => {
objectStore.createIndex(item + '_index', item, {
unique: false
});
})
}
}
};
},
deleteDb(dbname, callback) {
const deleteQuest = this.indexedDB.deleteDatabase(dbname);
deleteQuest.onerror = function () {
console.log('删除数据库出错');
};
deleteQuest.onsuccess = function () {
if (callback && (typeof callback === 'function')) {
callback();
}
}
},
closeDB(dbname) {
dbname.close();
console.log('数据库已关闭');
},
deleteData(db, storename, key, callback) {
const store = db.transaction(storename, 'readwrite').objectStore(storename);
const request = store.delete(key);
request.onsuccess = function () {
if (callback && (typeof callback === 'function')) {
callback('删除成功');
}
}
request.onerror = function () {
if (callback && (typeof callback === 'function')) {
callback('删除失败');
}
}
},
clearData(db, storename, callback) {
const store = db.transaction(storename, 'readwrite').objectStore(storename);
const request = store.clear();
request.onsuccess = function () {
if (callback && (typeof callback === 'function')) {
callback('清空数据成功');
}
}
request.onerror = function () {
if (callback && (typeof callback === 'function')) {
callback('清空数据失败');
}
}
},
addData(db, storename, list) {
const store = db.transaction(storename, 'readwrite').objectStore(storename);
list.forEach(ls => {
const request = store.add(ls);
request.onsuccess = function () {
console.log('数据写入成功');
};
request.onerror = function () {
console.log('数据写入失败');
}
})
},
updateData(db, storename, list) {
const store = db.transaction(storename, 'readwrite').objectStore(storename);
list.forEach(ls => {
const request = store.put(ls);
request.onsuccess = function () {
console.log('数据更新成功');
};
request.onerror = function () {
console.log('数据更新失败');
}
})
},
getData(db, storeName, key){
var objectStore = db.transaction(storeName).objectStore(storeName);
var request = objectStore.get(key);
request.onerror = function(event) {
console.log('事务失败');
};
return new Promise((resolve, reject) => {
request.onsuccess = function (e) {
resolve(e.target.result)
}
})
},
getDataByIndex(db, storeName, field, val) {
const objectStore = db.transaction(storeName).objectStore(storeName);
const index = objectStore.index(field + '_index');
const request = index.get(val);
return new Promise((resolve, reject) => {
request.onsuccess = function (e) {
resolve(e.target.result)
}
})
},
getAllData(db, storeName) {
const objectStore = db.transaction(storeName).objectStore(storeName);
const request = objectStore.openCursor();
let data = [];
return new Promise((resolve, reject) => {
request.onsuccess = function (e) {
var cursor = e.target.result;
if (cursor) {
data.push(cursor.value);
cursor.continue();
} else {
resolve(data)
}
}
})
},
readAllData(allDbData, list){
let flagIndex
allDbData.then(res => {
flagIndex = res.findIndex(val=>{
return (val.menuid == list[0].menuid)
})
})
return flagIndex
}
}