vue 父组件将异步请求回来的数据传递给子组件,子组件props可以接收到,但是没有值

前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时候就没了。
问题:vue项目中,将后台请求回来的数据,传递给子组件,子组件拿到数据的初始值,并没有拿到数据

直接上代码
父组件

<!-- 省份数据 -->
        <el-card class="sfsj">
            <province
            v-if="result&&resultflage"
            :result="result"
            ></province>
            <!-- @aaa="ccc" -->
            <!-- <exam-index></exam-index> -->
        </el-card>
        

data(){
    return {
       result: {}, // 全国总数据
       resultflage:false,
    }
}

 created(){
      this.getAllCountry()
    },

methods: {
  async getAllCountry() {
            let res = await allCountry()
            this.result = res        // 将数据保存在result
            this.resultflage=true     // 做一个标记 
  }
}


在这里插入图片描述
这里是将result传给子组件,如果不使用v-if,子组件props接到的result就是初始值并没有数据。原因就是这里没有等到后台数据赋值result就把data里的result(空对象)传过去了。这里使用v-if做了一个判断,当有result并且标记resultflage为true的时候,子组件才存在并且传值过去。(resultflage为true就说明后台请求的数据已经赋值给了result)

推荐大家使用v-if,别使用watch监听,否则你会搞到崩溃

参考:vue 父组件异步值传递给子组件 子组件进行数据处理
Vue父组件异步获取数据传值给子组件

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过以下方式将异步获取的数据传递给子组件: 1. 使用 props数据传递给子组件 组件中,可以通过异步请求获取数据后,在渲染组件时通过 props数据传递给子组件。示例代码: ```vue <template> <div> <child-component :data="data"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data() { return { data: [] } }, async created() { const response = await fetch('https://api.example.com/data') this.data = await response.json() } } </script> ``` 在组件中,通过 props 接收传递过来的数据并进行渲染。示例代码: ```vue <template> <ul> <li v-for="item in data" :key="item.id">{{ item.name }}</li> </ul> </template> <script> export default { props: { data: { type: Array, required: true } } } </script> ``` 2. 使用 provide/inject 在组件中提供数据组件中注入数据组件中,可以通过 provide 方法提供数据组件中通过 inject 方法注入数据。示例代码: ```vue // 组件 <template> <div> <child-component></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data() { return { data: [] } }, async created() { const response = await fetch('https://api.example.com/data') this.data = await response.json() }, provide: { fetchData: this.fetchData // 将 fetchData 方法提供给子组件 }, methods: { fetchData() { return this.data } } } </script> // 组件 <template> <ul> <li v-for="item in dataList" :key="item.id">{{ item.name }}</li> </ul> </template> <script> export default { inject: ['fetchData'], // 注入 fetchData 方法 computed: { dataList() { return this.fetchData() // 获取组件提供的数据 } } } </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值