【发布时间】:2020-05-06 09:32:52
【问题描述】:
我有一个 Vue 应用程序,我在其中创建了一个页面标题组件,该组件被拉入高级视图组件(主页、图书馆、教室)。在每个“更高”级别的视图中,我都有一个路由器视图,其中嵌套的“子路由”组件被加载。我想更改页眉组件中的标题以匹配加载的任何组件。自然地,在做了一些研究之后,我发现我无法使用道具或插槽来获得我需要的功能。我知道我可以使用路由参数或查询来完成工作,但是我不希望这些额外的信息弄乱 url。
我决定使用 Vuex 来存储 Page Header 组件所需的数据,因为它是我可以从任何地方访问的集中数据。对于我的解决方案,我在组件的created() 挂钩上使用了一个称为突变的方法,以在其中一个页面加载时更新页面标题存储数据。但是,这在初始加载时效果很好,但只会触发一次 (created())。如果我导航回一个页面,标题不会更新。
为了完成这项工作,我需要观察“$route”的变化吗?任何帮助,将不胜感激。我不知道如何在路线更改时重新提交突变。
代码如下:
page-header.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;
}
}
});
库.vue
<template>
<div>
<page-header />
<router-view></router-view>
</div>
</template> ....
library-feed.vue(到 Library.vue 的默认子路由,填充 router-view )
<template>
...
</template>
<script>
export default {
name: 'libraryFeed',
created() {
this.$store.commit('setPageTitle', {pageTitle: 'Library'})
},
}
</script>
【问题讨论】:
标签: vue.js vue-component vuex vue-router