Я следовал этот ответ.
По сути, вы создаете класс и используете новый экземпляр Vue для обеспечения реактивности.
plugin.js:
import Vue from 'vue';
class Notif {
constructor() {
this.VM = new Vue({
data: () => ({
notifs: [],
count: 0,
}),
});
}
get state() {
return this.VM.$data;
}
get count() {
return this.VM.$data.count;
}
}
const notif = {
Store: Notif,
install (Vue, options) {
Vue.mixin({
beforeCreate() {
this.$notif = options.store;
}
});
},
};
export default waiter;
затем использовать (в main.js):
import notif from './plugins/plugin.js';
Vue.use(notif, {
store: new notif.Store()
});
и доступ к нему:
this.$notif.state.notifs.push('some notif');
в шаблоне:
<span>{{$notif.count}}</span>
поэтому здесь state
дает вам доступ ко всем данным, или вы можете выставлять отдельные элементы, как я показал здесь.