Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js+Dexie:作为带有自定义函数的模块导入_Vue.js_Vuejs2_Dexie_Dexiejs - Fatal编程技术网

Vue.js+Dexie:作为带有自定义函数的模块导入

Vue.js+Dexie:作为带有自定义函数的模块导入,vue.js,vuejs2,dexie,dexiejs,Vue.js,Vuejs2,Dexie,Dexiejs,我有一个工作的Vue.js和一个Dexie IndexedDB数据库,工作平稳,如下所示: 在Vue中需要访问数据库的任何位置,我都会导入模块: import db from '@/services/MyIdb' 我可以直接访问Dexie方法,例如: db.table(tableName).clear() 模块MyIdb.js的设置如下:为了简化,我删除了一些代码和表: import Dexie from 'dexie' const db = new Dexie('myDa

我有一个工作的Vue.js和一个Dexie IndexedDB数据库,工作平稳,如下所示: 在Vue中需要访问数据库的任何位置,我都会导入模块:

import db from '@/services/MyIdb'
我可以直接访问Dexie方法,例如:

db.table(tableName).clear()
模块MyIdb.js的设置如下:为了简化,我删除了一些代码和表:

    import Dexie from 'dexie'

    const db = new Dexie('myDatabase')
    const idb_schema_old = { myTable: '&key', }
    const idb_schema = { myTable: '&key', }
    const db_version_old = 9
    const db_version = 10

    // NEW VERSION
    db.version(db_version_old).stores(idb_schema_old)
    db.version(db_version).stores(idb_schema)

    db.open().then(function(){
        // Success
    }).catch(Dexie.UpgradeError, function (e) {
        // Failed with UpgradeError
        console.error ("Upgrade error: " + e.message)
        console.log("Dropping database and installing latest version")
        db.delete()
        db.version(db_version).stores(idb_schema)
        db.open().catch(function (err) {
            console.error (err.stack || err);
        })

    }).catch(Error, function (e) {
        // Any other error derived from standard Error
        console.error ("Error: " + e.message);
    }).catch(function (e) {
        // Other error such as a string was thrown
        console.error (e);
    });

    export default db;
一切都好。但是,现在我希望能够从程序中的任意点调用初始化,有一个按钮可以删除并重新加载数据库。因此,类似这样的情况:

    import Dexie from 'dexie'

    const db = new Dexie('myDatabase')
    const idb_schema_old = { myTable: '&key', }
    const idb_schema = { myTable: '&key', }
    const db_version_old = 9
    const db_version = 10

    init() {
        // NEW VERSION
        db.version(db_version_old).stores(idb_schema_old)
        db.version(db_version).stores(idb_schema)

        db.open().then(function(){
            // Success
        }).catch(Dexie.UpgradeError, function (e) {
            // Failed with UpgradeError
            console.error ("Upgrade error: " + e.message)
            console.log("Dropping database and installing latest version")
            db.delete()
            db.version(db_version).stores(idb_schema)
            db.open().catch(function (err) {
                console.error (err.stack || err);
            })

        }).catch(Error, function (e) {
            // Any other error derived from standard Error
            console.error ("Error: " + e.message);
        }).catch(function (e) {
            // Other error such as a string was thrown
            console.error (e);
        });
    }

    export default db;
初始化现在是一个函数,我想调用它,比如db.init。 上面的代码是错误的,不起作用。但是如何实现这样的功能,我可以调用db.init或something.init之类的函数


在我的整个程序中,我已经导入了db并调用了Dexie方法,我不想重写所有这些。

我认为这段代码是对Dexie如何处理升级的误解。您不必捕获UpgradeError并重新初始化数据库。您只需声明您使用的版本,如果需要,Dexie将升级数据库。在Dexie3中,您也不需要在代码中保留模式的旧版本,请参阅

您似乎需要执行删除和重新创建数据库的操作。这应该使用,然后是对的新调用来完成。您也可以在所有表上使用,但不会重置自动递增键,并且无法在该操作中更改架构

异步函数重新创建DatabaseDB{ 等待db.delete; 等待数据库打开; }
这里还有一个执行db.delete,然后执行db.open的命令。

刚刚检查了my package.json,看起来我的版本是2.0.4。我还没有注意到v3的存在!除此之外,在迁移到v3时,我可能不再需要它,问题是如何向/a vuejs模块(如Dexie)添加您自己的函数。