Ниже приведен скелетный код, который демонстрирует проблему, связанную с принудительным порядком вызовов. Мне нужен следующий порядок:
- Пользователь вызывает Foo. vue's someLocalMethod ().
- Флаг установлен таким образом, чтобы Bar узнал о внесении изменений.
- Этот флаг вызовет наблюдателя Bar.vues на go вперед и сделает некоторые работы.
- Когда работа будет завершена, будет снят флаг
- Foo. Функция someLocalMethod () vue обнаружит, что флаг был снят, и продолжит работу с его работа
Следует отметить, что и Бар, и Фу выполняют работу, которая меняет хранилище, поэтому файлы связаны (вместо того, чтобы использовать хранилище как флаг между обоими файлами).
Я предполагаю, что есть намного лучший / более чистый способ приблизиться к тому, что я делаю, но я не могу полностью указать на это. Код показан ниже.
Бар. vue
computed: {
...mapGetters('store', ['getSomeFlag']),
},
methods: {
...mapMutations('store', ['setSomeFlag']),
},
watch: {
getSomeFlag(newValue) {
if (newValue === true) {
console.log('Flag is set. Going to do work');
doWorkRelevantToBarPage();
setSomeFlag(false);
}
}
}
Foo. vue
methods: {
...mapActions('store', ['someStoreCall']),
...mapMutations('store', ['setSomeFlag']),
someLocalMethod(someData) {
this.setSomeFlag(true);
// somehow wait until Bar.vue's watcher becomes aware of it and completes it's own work
this.someStoreCall(someData);
}
},
store. js
state: {
someFlag: false,
data: {
// Can be tons of nested structures, properties, etc
},
},
getters: {
getSomeFlag: (state) => state.someFlag,
},
mutations: {
setSomeFlag(state, value) {
state.someFlag = value;
},
},
actions: {
async someStoreCall({dispatch, commit, state}, data) {
console.log('In someStoreCall');
}
},