使用 nuxt,如何将路由名称放在页面标题中?

Posted

技术标签:

【中文标题】使用 nuxt,如何将路由名称放在页面标题中?【英文标题】:Using nuxt, how do I put the route name in the page title? 【发布时间】:2018-06-25 09:52:15 【问题描述】:

我想为每个页面设置不同的页面标题。

在常规的 Vue.js 中,我做了以下事情:

import router from './router'
import  store  from './store/store';

router.beforeEach((to, from, next) => 
    store.mutations.setRoute(to);
    document.title = store.getters.pageTitle;
    next();

如何在 nuxt 中获得这种效果?

也就是说,在初始页面加载和更改页面时,我希望浏览器选项卡的标题发生变化。例如,从“我的应用 - 关于”到“我的应用 - 个人资料”。

【问题讨论】:

【参考方案1】:

来自nuxt docs,在每个pages 组件中,您可以定义返回页面标题的head 函数,即

head() 
    return 
      title: "About page"
    ;
  

【讨论】:

这很有效——我可以将静态页面名称放入其中,但这并不适用于所有情况。我想使用 vuex 存储来计算页面名称,因为它在某些情况下会包含一个星号。但是将它与mounted() document.title = 结合起来效果很好。谢谢! head() return title: this.$route.name , @CharlesBrandt 该建议非常有效。谢谢【参考方案2】:

我找到了一种方法来做到这一点,但我不知道这是否是“正确”的方式。我使用default.vue 中的mounted() 函数进行初始页面加载,使用nuxt.config.js 中的transition 属性进行每次页面更改。所以,在default.vue

...mapGetters(['appTitle']),
...mapMutations(['setRoute']),
mounted() 
    this.setRoute(this.$route.name);
    document.title = this.appTitle();

nuxt.config.js:

transition: 
    name: 'page',
    mode: 'out-in',
    beforeEnter (el) 
        this.$store.commit("setRoute", this.$route.name);
        document.title = this.$store.getters.appTitle;
    
,

【讨论】:

你看我的回答了吗? 这个答案对我来说很有效,因为我有一个大型应用程序并在一个 js 文件中以编程方式管理我的所有路线和元数据;在那里管理标题也很有意义。我宁愿不必处理遍布各处的众多页面组件中的title 另外:使用document.title 似乎是合法的,就像 vue-creator Evan You 本人在these title snippets 中所做的那样。

以上是关于使用 nuxt,如何将路由名称放在页面标题中?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据nuxt中的特定页面更改标题中的项目

将 Nuxt 配置为按路由或页面包含 CSS,而不是全局

nuxt简介

动态 Nuxt 页面选择

(Nuxt.js/Vue.js) - 脚本只运行一次,更改路由/刷新页面后停止运行

页面重新加载后 Nuxt 动态路由返回 404