IndexedDB 数据存储方案

3、对象仓库增删改查操作

通过操作数据库实例 this.db 搭配其内部属性 transaction 事务函数

indexedDB.ts 中的类 indexedDB 里面添加这些函数

1、增加、修改数据 put

// 新增、修改对象仓库数据  参数:仓库名、数据
updateItem(storeName: string, data: any) {
    // 打开对象仓库
    const store = this.db.transaction([storeName], 'readwrite').objectStore(storeName)

    // 仓库写入数据 updateTime:使数据唯一化
    let request = store.put({
        ...data, updateTime: new Date().getTime()
    })

    // 写入成功的回调
    request.onsuccess = function(e) {
        console.log('数据写入成功');
    }

    // 写入失败的回调
    request.onerror = function (e) {
        console.log('数据写入失败');
    }
}

在实例中增加、修改属性 单个数据也必须用对象形式

// 增加属性
airbnDB.updateItem(storeName, {name: 'cocoon', age: 18})

// 修改属性(通过主键修改)
airbnDB.updateItem(storeName, {id: 1, name: 'czy', age: 21})

主键(id)也会按递增顺序加入数据中

2、删除数据 delete

deleteItem(storeName: string, keyPath: string | number) {
    // 打开对象仓库
    const store = this.db.transaction([storeName], 'readwrite').objectStore(storeName)

    let request = store.delete(keyPath)

    request.onsuccess = function (e) {
        console.log('数据删除成功');
    }

    request.onerror = function (e) {
        console.log('数据删除失败');
    }
}
airbnDB.deleteItem(storeName, 2)

3、查询数据 get

返回值用到了 Promise 对象,那么调用的时候必须用 async/await

// 查询所有数据
getList(storeName: string) {
    const store = this.db.transaction(storeName).objectStore(storeName)

    const request = store.getAll()

    // 返回异步函数结果
    return new Promise((resolve, reject) => {
        request.onsuccess = (event: any) => {
            console.log('查询所有数据成功')

            // 成功得到数据并返回
            resolve(event.target.result) // 成功态
        }

        request.onerror = (event: any) => {
            console.log('查询所有数据失败')

            // 返回失败结果
            reject(event) // 失败态
        }
    })
}

// 查询单条数据
getItem(storeName: string, key: number | string) {
    const store = this.db.transaction(storeName).objectStore(storeName)

    const request = store.get(key)

    // 返回异步函数结果
    return new Promise((resolve, reject) => {
        request.onsuccess = (event: any) => {
            console.log('查询某一条数据成功')

            // 成功得到数据并返回
            resolve(event.target.result) // 成功态
        }

        request.onerror = (event: any) => {
            console.log('查询某一条数据失败')

            // 返回失败结果
            reject(event) // 失败态
        }
    })
}

实际调用:

async function check(storeName: string) {
    let result = await airbnDB.getList(storeName)

    console.log(result); // 成功态获得数据  失败态获得 event 对象   
}
GitHub 加速计划 / vu / vue
207.52 K
33.66 K
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:1 个月前 )
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 3 个月前
e428d891 Updated Browser Compatibility reference. The previous currently returns HTTP 404. 3 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐