Инициализируйте данные хранилища vuex при запуске в Vue -Electron App, используя v-модель - PullRequest
0 голосов
/ 23 января 2020

Я тоже пытаюсь собрать свое первое electron-vue приложение. Для своих данных о состоянии я использую vuex.

Я использую двустороннее связывание для нескольких bootstrap-vue форм. В начале программы я хочу инициализировать значения этих форм по умолчанию, либо из лога программы c, либо значений, считанных из файла конфигурации. Но здесь я борюсь с моим кодом. Данные хранилища обновляются (в моем примере установлено значение true), но флажок b-form-check, который остается непроверенным, не обновляется. Я просто не понимаю, почему?

Вот мой код для компонента:

<template>
  <div>
    <b-form-checkbox
      v-model="saveOriginalImage"
    > Save Original Image
    </b-form-checkbox>
  </div>
</template>

<script>
  export default {
    data() {
      return {
      }
    },
    computed: {
        saveOriginalImage: {
        get() {
          return this.$store.getters.GET_SAVE_ORIGINAL_IMAGE;
        },
        set(value) {
          this.$store.dispatch('setSaveOriginalImage', value);
        }
    }
  }
}
</script>

Мой магазин. js

const state = {
  SaveOriginalImage: false,
}

const getters = {
  GET_SAVE_ORIGINAL_IMAGE: state => {
    return state.SaveOriginalImage;
  },

const mutations = {
  SET_SAVE_ORIGINAL_IMAGE (state, payload) {
    state.SaveOriginalImage = payload;
  },
}

const actions = {
  init ({ commit }) {
    commit('SET_SAVE_ORIGINAL_IMAGE', true);
  },

  setSaveOriginalImage ({ commit }, payload) {
    console.log("Action: setSaveOriginalImage payload = " + payload)
    commit('SET_SAVE_ORIGINAL_IMAGE', payload)
  },
}

export default {
  state,
  getters,
  mutations,
  actions
}

Я инициализация данных хранилища для события app.on в моем индексе. js

app.on('ready', () => { 
  store.dispatch('init'); 
  createWindow();
}

1 Ответ

0 голосов
/ 24 января 2020

Я нашел обходной путь, используя setTimeout:

app.on('ready', () => { 
  setTimeout(() => {
    store.dispatch('init'); 
  }, 2500);
  createWindow();
}

Для меня это похоже на проблему синхронизации, я попробовал browserWindow события ready-to-show и еще несколько, чтобы получить правильное время чтобы вызвать функцию инициализации моего магазина, но безрезультатно.

...