如何在 Nuxt 中等待页面元头 属性 之前的 post 数据?

How to await for the post data before the page meta head property in Nuxt?

我正在使用 Nuxt SSR 动态注入 head property 来设置页面级元数据。数据是从 Firebase 获取的。我得到 属性 undefined 因为它不等待 post 数据加载完成。如何在 head 属性 之前等待 post 数据?

client.js?16a3:97 TypeError: Cannot read property 'post' of undefined

// page\:post.vue
<script>
import { mapState, mapActions } from 'vuex'
export default {
  fetch() {
    this.fetchPost()
  },
  computed: {
    ...mapState('posts', ['post']),
  },
  methods: {
    ...mapActions('posts', ['fetchPost']),
  },
  head: {
    title: this.post.title,
    link: [{ rel: 'canonical', href: this.post.canonical }],
    meta: [
      { hid: 'name', itemprop: 'name', content: this.post.title },
      {
        hid: 'description',
        itemprop: 'description',
        content: this.post.content,
      },
    ],
  },
}
</script>

// store\posts.js
export const state = () => ({
  post: null,
})
export const mutations = {
  setPost(state, payload) {
    state.post = payload
  },
}
export const actions = {
  async fetchPost({ commit }, key) {
    const doc = await postsCollection.doc(key).get()
    if (doc.exists) commit('setPost', doc.dat())
  },
}

您构造头部(对象)的方式可以更改为一个函数。

head() {
    retun {
        title: this.post.title,
        link: [
            { rel: 'canonical', href: this.post.canonical }
        ],
        meta: [
            { hid: 'name', itemprop: 'name', content: this.post.title },
            {
                hid: 'description',
                itemprop: 'description',
                content: this.post.content,
            },
        ],
    }
}

我在 GitHub here 上阅读了类似的 post。由于您正在使用商店,因此我假设您也在使用 asyncData 函数来获取它们。