Мне недавно тоже пришлось сделать это, чтобы создать плагин pouchDb, и я нашел новый способ.
Когда вы создаете свой первый объект Vue, вы можете сделать это.
import PouchDb from '@/pouch_db/PouchDbPlugin'
let DefaultVue = Vue.extend({
components: {App},
store,
created () {
Vue.use(PouchDb, this.$store) // Create it by passing in the store you want to use
}
})
Мой плагин добавляет дополнительный магазин, а также собственные мутации и геттеры.
export default {
install (Vue, store) {
store.registerModule('PouchDb', pds)
const pouchDb = new PouchDb(store)
Vue.pouchDb = pouchDb
Vue.prototype.$pouchDb = pouchDb
}
}
Внутри конструктора я храню магазин
class PouchDb {
constructor (store) {
this.store = store
// ... etc.
}
// ... more functions
}
А затем использовать его в других функциях
class PouchDb {
// ... constructor and other functions
async addSync (docId) {
this.store.dispatch('PouchDb/addSync', docId)
}
}
Это что-то вроде обмана, чтобы пройти в магазине, но, кажется, работает хорошо. Это можно использовать во всем приложении, как это
// Inside vuex store
Vue.pouchDb.addSync(// ...etc)
// inside component
Vue.$pouchDb.removeSync(// ...etc)