для создания общей переменной (состояния) между всеми экземплярами в vue.js, вы можете использовать vuex. это так просто, просто добавьте vuex в ваши пакеты и создайте такой экземпляр:
import Vuex from 'vuex'
const store = new Vuex.Store({
state: {
test: 'foo',
},
mutations: {
setTest(state, payload) {
state.test = payload
}
},
});
теперь вам нужно добавить этот магазин в ваш основной экземпляр vue:
import Vue from 'vue'
Vue.use(Vuex);
let vm = new Vue({
el: '#app',
store,
// ...
});
все готово. теперь в каждом компоненте вы можете получить доступ к состояниям с помощью this.$store.state
. для облегчения жизни вы можете определить вычисляемую переменную следующим образом:
computed: {
test() {
return this.$store.state.test
}
}
чтобы изменить состояние, вам просто нужно зафиксировать мутацию setTest. Вы должны добавить эту мутацию в методы и просто вызвать ее так:
methods: {
...Vuex.mapMutations(['setTest']),
myMethod() {
// do this
this.setTest('some value');
// do that
}
}
вы также можете создать глобальный миксин, как я уже говорил, чтобы добавить это вычисление и мутацию к каждому экземпляру, подобному следующему: (добавьте это перед созданием основного экземпляра vue)
Vue.mixin({
computed: {
test() {
return this.$store.state.test
}
},
methods: {
...Vuex.mapMutations(['setTest']),
}
});
но я не рекомендую делать это, потому что, когда проект становится большим, становится так трудно избежать путаницы в именах. Лучше сделать их отдельно для каждого компонента, чтобы выбрать собственные имена.