Vue 3 等待对象被获取
2022-02-02
4048
我是 Vuejs 新手,请帮忙。我正在调用一个组件来创建一个“成员”。在调用此组件并传递成员数据时,该组件引发了与内部函数之一相关的错误。考虑到成员数据是通过 API 获取的,问题似乎是成员数据最初并未得到满足。我尝试将导致错误的函数转换为异步,但这似乎也不起作用。下面是一些针对我的问题的代码片段。
Home.vue
<Member :member="memb" />
data() {
return {
memb: {},
};
},
//Method fetching the member from api
async fetchMember(memberId) {
const res = await axios.get(`http://localhost:3000/members/${memberId}`, { apiHeaders });
return res.data;
},
//Method which fetched the member
async created() {
this.memb = await this.fetchMember(1);
},
Member.vue
<template>
<div class="m-auto">
<p>Name: {{ member.name }}</p>
<p>Surname: {{ member.surname }}</p>
<p>Date of Birth: {{ formatDob(member.dob) }}</p>
<p>Age: {{ calculateAge(member.dob) }}</p>
<p>Relationship: {{ member.relationship }}</p>
<button class="bg-blue-500 py-1 px-4 rounded-md text-gray-100 text-sm mx-1 mt-3 font-bold" @click="$emit('get-member-id', member.id)">Update</button>
<button class="bg-red-500 py-1 px-4 rounded-md text-gray-100 text-sm mx-1 mt-3 font-bold" @click="$emit('delete-member', member.id)">Delete</button>
</div>
</template>
<script>
export default {
name: 'Member',
props: {
member: Object,
},
methods: {
// Converting the date of birth format
formatDob(dob) {
return dob.split('/').reverse().join('/');
},
// Calculating the date of birth by comparing today's date with the member's date of birth
calculateAge(dob) {
const birthdate = new Date(dob);
const todayDate = new Date();
const difference = todayDate - birthdate; // This is the difference in milliseconds
return Math.floor(difference / 31557600000);
},
},
};
</script>
我遇到的问题与从 Member 组件调用 formatDOB 有关。实际上,问题是:未捕获(在承诺中)TypeError:无法读取未定义的属性(读取“split”)
提前致谢。
1个回答
- 如果我们可以实现一个进度指示器,用于通知用户数据加载活动,那就太酷了
- 一旦成员数据加载完毕,您就可以开始显示成员组件并隐藏进度指示器。
- 伪代码如下所示。
<Member v-if="isLoaded" :member="memb" />
<ProgressBar v-if="!isLoaded" />
<script>
export default {
data: (() => {
return {
isLoaded: false,
memb: null
}
})
async mounted() {
this.isLoaded = false;
this.memb = await this.fetchMember(1);
this.isLoaded = true;
}
}
</script>
Allan Chua
2022-02-02