4

在一个页面中,我设置了这样的标题:

...
<script>
export default {
  head() {
    return {
      title: this.post.name
    }
  }
}
</script>

如何在另一个组件中获取这些数据?

我试过了,this.$metaInfo但是我需要获取数据的组件在外面的布局中<nuxt />......
另外,如果当前路由在一个带有填充头部的子页面中,它会覆盖父标题。那么,我该怎么做?

4

2 回答 2

4

this.$metaInfo只能在页面组件中访问。如果您想在任何地方拥有当前页面的标题,我认为最好的方法是使用store保存当前标题,然后在任何组件中轻松检索此信息。

store/index.js中

export const state = {
  title: 'Default Title'
}

export const mutations = {
  SET_TITLE (state, title) {
    state.title= title
  }
}

然后在页面组件上使用它

<template>
  <div></div>
</template>

<script>
export default {
  head () {
    return {
      title: this.title
    }
  },
  mounted () {
    this.$store.commit('SET_TITLE', this.$metaInfo.title)
  }
}
</script>

现在,您可以在从商店状态中检索它的任何组件中访问当前标题。

<template>
  <div></div>
</template>

<script>
import { mapState } from 'vuex'
export default {
  computed: {
    ...mapState({
      title: state => state.title
    })
  }
}
</script>
于 2019-11-14T14:37:20.287 回答
0

您可以向上走组件树,直到到达页面组件

metaInfoTitle() {
  let curr = this
  let title = null
  do {
    title = curr?.$metaInfo?.title
    curr = curr.$parent
  } while (!title && curr)
  return title
},
于 2021-07-13T08:17:56.593 回答