Nuxt:Head函数不适用于标题或元标记

时间:2019-09-19 14:35:17

标签: html vue.js nuxt.js nuxt

我有一个用Nuxt构建的网页,对于不同的页面,我想在标题中使用不同的标题并使用不同的元描述。我该怎么做?

我在Nuxt文档中找到了head()方法,但这似乎不适用于我。

在我的contact.vue中:

export default class Contact extends Vue {
   head() {
      return {
         title: 'Contact page',
         meta: [
            { hid: 'description', name: 'description', content: 'This is a contact page' }
         ]
      }
   }
}

在我的nuxt.config.js中:

head: {
    title: 'My website',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: process.env.npm_package_description || '' }
    ],
}

根据文档,我希望这会生成元标记。但是它仅显示nuxt.config.js中声明的标题和元描述。我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

我知道了。 在组件中,我将head方法放入类中。这没用。当我将它放在Component装饰器中时,就像这样:

 @Component({
    head(): object {
      return {
        title: this.$i18n.t('meta.home.title'),
        meta: [
          {
            hid: 'description', 
            name: 'description',
            content: this.$i18n.t('meta.home.description') 
          },   
        ]
      }
    }
  })
  export default class Home extends Vue {
   ...
}

确实有用。

起初我遇到了错误

Object literal may only specify known objects and 'head' does not exist in type 'ComponentOptions'

此问题通过扩展ComponentOptions来解决,如下所示:

 declare module "vue/types/options" {
    interface ComponentOptions<V extends Vue> {
      head?: etc etc
    }
  }