Вместо того, чтобы пытаться передавать данные напрямую между такими компонентами, вам следует взглянуть на создание шины событий . В данном случае это просто еще один экземпляр Vue, но вы можете подписываться на него и генерировать на него события точно так же, как обычный экземпляр Vue, позволяющий осуществлять двустороннюю передачу данных.
Из статьи:
// ./event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();
Отправка событий в автобусе:
// PleaseClickMe.vue
<template>
<div class="pleeease-click-me" @click="emitGlobalClickEvent()"></div>
</template>
<script>
// Import the EventBus we just created.
import { EventBus } from './event-bus.js';
export default {
data() {
return {
clickCount: 0
}
},
methods: {
emitGlobalClickEvent() {
this.clickCount++;
// Send the event on a channel (i-got-clicked) with a payload (the click count.)
EventBus.$emit('i-got-clicked', this.clickCount);
}
}
}
</script>
Прослушивание событий в автобусе:
// Import the EventBus.
import { EventBus } from './event-bus.js';
// Listen for the i-got-clicked event and its payload.
EventBus.$on('i-got-clicked', clickCount => {
console.log(`Oh, that's nice. It's gotten ${clickCount} clicks! :)`)
});
Теперь вы можете просто проверить URL и изменить кнопки в зависимости от того, какой маршрут отображается,