Что вы можете сделать, это создать шину событий.Это позволит вам отправлять сообщения на 1+ компонентов одновременно.Как только вы отправите сообщение, все компоненты, которые прослушивают, будут выполнены.
Сначала вам нужно создать шину:
bus.js
import Vue from 'vue';
export const EventBus = new Vue();
Далее в компоненте, который будет отправлять вызываемое вами сообщение EventBus.$emit(name, data)
componentA.js
import { EventBus } from './bus.js';
export default {
methods: {
emitGlobalClickEvent() {
EventBus.$emit('i-got-clicked', 'extra data');
}
}
}
Затем в других ваших компонентах вам просто нужнослушать событие.Следующее можно добавить к компоненту, и вам просто нужно использовать EventBus.$on(name, handle)
или, если вы хотите слушать только один раз, используйте EventBus.$once(name, handle)
.
componentB.js
import { EventBus } from './bus.js';
export default {
created() {
EventBus.$on('i-got-clicked', data => {
console.log(data)
// You can then call your method attached to this component here
this.openModal()
});
},
methods: {
openModal() {
console.log('I am opening')
}
}
}