如何在Vue.js中处理异步数据加载和渲染?
一个select框组件,其中的数据是从后端返回的,打开这个组件时往里传入了value值,但是页面打开时也会显示这个value值,等后端结果返回才能显示对应的label值,如何让组件先不渲染value直接渲染label?
将请求的生命周期放在async created中没用
回复
1个回答
test
2024-06-23
我的思路是,子组件内部先根据option的长度判定是否传给Select组件value,当option为空的时候,传给它undefined,然后通过Select的change事件emit数据给父组件,你的单选联动可以在单选改变之后,调子组件的获取options方法
<template>
<el-select :value="selectVal" @change="handleChange">
<el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</template>
<script>
export default {
props: ['value'],
emits: ['update:value'],
data() {
return {
selectOptions: [],
}
},
computed: {
selectVal() {
return this.selectOptions.length ? this.value : undefined
}
},
created() {
this.getOptions()
},
methods: {
async getOptions() {
this.selectOptions = []
// 异步请求任务
// awati axios(...)
this.selectOptions = [
{ value: 'Option1', label: 'Option1', },
{ value: 'Option2', label: 'Option2', },
]
},
handleChange(e) {
this.$emit('update:value', e)
}
}
}
</script>
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容