У меня есть приложение Vue, в котором я создал компонент «Заголовок страницы», который перетаскивается в высокоуровневые компоненты представления (Дом, Библиотека, Классная комната). В каждом из этих представлений «более высокого» уровня у меня есть представление маршрутизатора, куда загружаются вложенные компоненты «дочернего маршрута». Я хотел изменить заголовок в компоненте Заголовок страницы, чтобы он соответствовал любому загружаемому компоненту. Естественно, после некоторых исследований я понял, что не могу использовать реквизит или слот для получения необходимой мне функциональности. Я знаю, что могу использовать параметры маршрута или запросы для выполнения работы, однако я не хочу, чтобы эта дополнительная информация загромождала URL.
Я решил использовать Vuex для хранения данных, необходимых для компонента Page Header, поскольку это были бы централизованные данные, к которым я мог получить доступ откуда угодно. Для моего решения я использовал вызванную мутацию на хуке created()
компонента, чтобы обновить данные хранилища заголовков страниц при загрузке одной из страниц. Тем не менее, это прекрасно работает при начальной загрузке, но срабатывает только один раз (created()
). Если я вернусь на страницу, заголовок не обновится.
Чтобы выполнить эту работу, нужно ли мне смотреть «$ route» на наличие изменений? Любая помощь будет оценена. Я не могу понять, как возобновить мутацию при изменении маршрута.
Код ниже:
заголовок страницы. vue
<template>
<div class="page-header">
<h2>{{ getPageTitle }}</h2>
</div>
</template>
<script>
export default {
name: 'pageHeader',
computed: {
getPageTitle(){
return this.$store.state.pageTitle;
}
}
}
</script>
store / store. js
export const store = new Vuex.Store ({
state: {
pageTitle: '',
},
mutations: {
setPageTitle(state, payload) {
state.pageTitle = payload.pageTitle;
}
}
});
Library. vue
<template>
<div>
<page-header />
<router-view></router-view>
</div>
</template> ....
library-feed. vue (дочерний маршрут по умолчанию к Library. vue, который заполняет представление маршрутизатора)
<template>
...
</template>
<script>
export default {
name: 'libraryFeed',
created() {
this.$store.commit('setPageTitle', {pageTitle: 'Library'})
},
}
</script>