Я работаю с Vuex и vuejs. В настоящее время у меня есть 2 vue экземпляров (я знаю, что это плохо, но я не могу поступить иначе, это не вопрос)
Боковая панель. js vue определение:
//VUEX stores
import { dashboardStore } from './../../js/Stores/DefinitionMappingStores/VuexStoreForDashboardPage'
//first vue with initialisation of state
var vmSidebar = new Vue({
el: '#sidebar-content',
store: dashboardStore,
created() {
this.$store.dispatch('search/setMiniWidgets', miniwidgetsfromjson);
},
})
Dashboard. js:
import { dashboardStore } from './../../js/Stores/DefinitionMappingStores/VuexStoreForDashboardPage'
//second vue where state is empty (array(0) instead of having 20+ items inside)
var vm = new Vue({
el: '#dashboard-container',
store: dashboardStore,
mounted: function () {
let that = this; //take this reference, pointing to the current Vue instance
let grid = GridStack.init(options, this.$refs["dashboardref"].$el); //initialise gridstack grid (javascript lib)
grid.on('dropped', function (event, previousWidget, newWidget) { //here is a javascript event)
console.log(this); console.log(that); //here this is the dropped div element / that is the vue instance saved before... but it keep the $store variable not following change...
let vueMiniWidgetComponentFromSidebar = that.$store.getters['search/getFilteredMiniWidgetsById'](idFromNewAddedNode); //here the store search is not initialized but in the other vue from sidebar I see it initialized
});
},
})
SearchMo store store:
const searchModule = {
namespaced: true,
state: {
miniWidgets: []
},
getters: {
getFilteredMiniWidgetsById: (state) => (id) => {
if (id == undefined || id == null || id == "") {
return null;
} else {
return state.miniWidgets.find(miniWidget => miniWidget.Id === id)
}
}
},
}
export default searchModule;
VuexStoreForDashboardPage. js:
import searchModule from './../SearchModuleStore.js'
import userTutorialModule from './../UserTutorialModuleStore.js'
//VUEX stores
export const dashboardStore = new Vuex.Store({
modules: {
//a lot of others modules
search: searchModule,
},
})
Я думаю, что моя проблема в том, что я сохраните «состояние» экземпляра Vue, а не ссылку на него, поэтому каждый раз, когда будет вызываться моя функция grid.on, ссылка «that», указывающая на сохраненный экземпляр Vue, будет одинаковой (сохраненный one).
Итак, мой вопрос: как заставить мою функцию grid.on получать правильный экземпляр vue с изменением связанного хранилища? И как сделать так, чтобы один и тот же магазин Vuex совместно использовал информацию в этих двух файлах?
Редактировать: Когда я проверяю с помощью инструмента Vue dev, На вкладке компонентов во втором vue, мой массив miniWidgets пуст, а мой первый vue заполнен правильно. Если я иду на вкладку VueX, я вижу, что объект состояния заполнен правильно ... Почему мое хранилище vuex во втором экземпляре vue неверно?
Редактировать 2 Это работает, когда 2 vue экземпляров находятся в одном файле, но не тогда, когда они находятся в двух разных файлах, а затем импортируются в один файл. Вы знаете, как это исправить, но сохраняя эти 2 файла?