我有一个客户端渲染的 SPA 应用程序,在 nuxt.config.js 中有以下设置:
export default {
generate: {
fallback: true,
},
target: "static",
ssr: false
}
现在我有一个动态页面,在该页面下pages/sample/_id.vue
使用 SPA 后备可以正常工作。在该页面中,我试图通过head
属性设置元标记,其中包含来自子组件的数据,如下所示:
<template>
<MyComponent ref="myComponent" :foo="foo">
</template>
<script>
import { Vue, Component } from "nuxt-property-decorator"
@Component({
async asyncData ({ $axios }) {
const foo = await $axios.$get("...")
return { foo }
},
})
export default class MyPage extends Vue {
head () {
return {
title: this.$refs.myComponent.title // myComponent is guaranteed to have the `title` property
}
}
}
</script>
但是当我打开页面时,我得到了错误TypeError: myComponent is undefined
,因为它试图在创建具有必要数据的子组件之前设置头部。我尝试通过使 head 方法异步并像这样等待来解决Vue.nextTick()
此问题:
async head () {
await Vue.nextTick()
console.log(this.$refs.myComponent.title) // prints the correct value
return {
title: this.$refs.myComponent.title // doesn't set the title though
}
}
这修复了类型错误,但即使 console.log 从子组件打印正确的值,它也不会设置标题。我怎样才能让它正确设置标题?