对于一个表单,我们有 2 个组件父组件(用于调用 asyncdata 并将数据作为道具传递给子组件)和子组件(表单)。如果我使用链接导航,我可以正确获取子项中的道具。但是如果我尝试刷新子组件页面,它会抛出错误,因为没有传递任何道具。发现原因是在子渲染发送道具数据之前父异步数据未完成。
父组件
<template>
<div>
<p>EDIT</p>
<NewListingModal :is-edit="true" :form-props="this.form" />
</div>
</template>
<script>
import NewListingModal from '@/components/NewListingModal.vue'
export default {
components: { NewListingModal },
async asyncData({ params, store }) {
const listing = await store.$db().model('listings').find(params.listing) //vuexorm call
if (typeof listing !== 'undefined') {
const convertedListing = JSON.parse(JSON.stringify(listing))
return {
name: '',
scrollable: true,
form: {names: convertedListing.names}
}
}
},
}
</script>
子组件(删除其他表单数据以使其易于理解)
<template>
<div v-for="name in this.form.names" :key="name">
<p>{{ name }} <a @click.prevent="deleteName(name)">Delete<a /></a></p>
</div>
</template>
<script>
import Listing from '@/models/listing'
export default {
name: 'ListingModal',
props: {isEdit: {type: Boolean, default: false}, formProps: {type: Object}},
data() {
return {
name: '',
scrollable: true,
form: {names: this.formProps.names}
}
},
methods: {
addName() {
this.form.names.push(this.name)
this.name = ''
},
deleteName(name) {
const names = this.form.names
names.splice(names.indexOf(name), 1)
}
}
}
</script>
如何让NewListingModal
组件渲染等到父级中的 asyncData 完成?