欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue父組件異步如何獲取數(shù)據(jù)傳給子組件

 更新時(shí)間:2023年11月09日 09:49:21   作者:donggua_123  
這篇文章主要介紹了vue父組件異步如何獲取數(shù)據(jù)傳給子組件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue父組件異步獲取數(shù)據(jù)傳給子組件

最近一直在做一個(gè)vue移動(dòng)端商城的實(shí)戰(zhàn),期間遇到一個(gè)小小的問(wèn)題,值得一說(shuō),可能別人已經(jīng)遇到過(guò)了,只是我第一次遇到而已。

首頁(yè)有個(gè)樓層區(qū)域,用于展示不同類(lèi)別的商品,

比如:水果,衣服,酒水等,布局都是一樣的,所以將單個(gè)樓層獨(dú)立出來(lái)成一個(gè)組件,只需要給響應(yīng)的樓層傳入對(duì)應(yīng)的數(shù)據(jù)就可以按需渲染了:

先在父組件引入,并注冊(cè)樓層組件

 import Floor from '@/components/pages/common/Floor'
 components: {
      swiper,
      swiperSlide,
      Floor
    }

數(shù)據(jù)初始化

data() {
      return {
        locationIcon: require('../../assets/images/location.png'),
        bannerSwipePics: [],
        category: [],
        adBar: '',
        recommendGoods: [],
        swiperOptions: {
          slidesPerView: 3
        },
        floorSeafood: {},
        floorBeverage: {},
        floorFruits: {}
      }
    },

使用組件

<!--樓層-->
        <Floor :floorGoods='floorSeafood'></Floor>
        <Floor :floorGoods='floorBeverage'></Floor>
        <Floor :floorGoods='floorFruits'></Floor>

在子組件里進(jìn)行一下數(shù)據(jù)接收就行

props: ['floorGoods']

但是現(xiàn)在問(wèn)題是父組件的數(shù)據(jù)是異步獲取的,而子組件一開(kāi)始就會(huì)渲染,如果此時(shí)沒(méi)有傳入數(shù)據(jù),而子組件又要用到數(shù)據(jù)中的length屬性時(shí)就會(huì)報(bào)錯(cuò):

雖然頁(yè)面也能正常渲染,但是看到這個(gè)紅紅的報(bào)錯(cuò)提示就不爽!

怎么辦呢?最簡(jiǎn)單的辦法就是讓子組件條件渲染,當(dāng)有數(shù)據(jù)的時(shí)候才渲染,這樣就不會(huì)拋出錯(cuò)誤了。

但是這還不夠完美,子組件一般不直接使用父組件傳來(lái)的值,二是監(jiān)聽(tīng)一下,然后有變化了的時(shí)候再賦值給data,渲染的時(shí)候用data里的數(shù)據(jù),這樣就能保證隨時(shí)動(dòng)態(tài)更新數(shù)據(jù)

props: ['floorGoods'],
      data() {
        return{
          flGoods: {}
        }
      },
      watch: {
        floorGoods(val) {
          this.flGoods = val;
          console.log(val);
        }
      }

在一個(gè)方法就是在父組件里用Promise方法異步執(zhí)行數(shù)據(jù)的賦值:

new Promise((resolve,reject) => {
          if (res.status === 200){
            resolve(res);
          }
        }).then((res) => {
          this.category = res.data.data.category;
          this.adBar = res.data.data.advertesPicture.PICTURE_ADDRESS;
          this.bannerSwipePics = res.data.data.slides;
          this.recommendGoods = res.data.data.recommend;
          // 也可異步獲取再傳給子組件 Promise
          this.floorSeafood = res.data.data.floor1;
          this.floorBeverage = res.data.data.floor2;
          this.floorFruits = res.data.data.floor3;
          console.log(this.floorFruits);
          this._initScroll();
        })
      }).catch(err => {
        console.log(err);
      });

這樣也是可以的,異步獲取數(shù)據(jù)導(dǎo)致的報(bào)錯(cuò)的情況會(huì)在各個(gè)場(chǎng)景出現(xiàn),比如根據(jù)數(shù)據(jù)渲染dom,而對(duì)dom有js操作的時(shí)候,會(huì)因?yàn)檫€沒(méi)渲染出來(lái)而找不到響應(yīng)的dom元素報(bào)錯(cuò),這里可以用vue提供的$nextTick()函數(shù),或者手動(dòng)開(kāi)個(gè)setTimeout定時(shí)器,延遲獲取;

使用better-scroll的時(shí)候因?yàn)閐om沒(méi)有渲染出來(lái)而無(wú)法獲取滾動(dòng)元素的高度,導(dǎo)致無(wú)法滾動(dòng),同樣可以用vue提供的這個(gè)函數(shù),等dom渲染完了后再初始化滾動(dòng)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flutter部件內(nèi)部狀態(tài)管理小結(jié)之實(shí)現(xiàn)Vue的v-model功能

    Flutter部件內(nèi)部狀態(tài)管理小結(jié)之實(shí)現(xiàn)Vue的v-model功能

    本文是 Flutter 部件內(nèi)部狀態(tài)管理的小結(jié),從部件的基礎(chǔ)開(kāi)始,到部件的狀態(tài)管理,并且在過(guò)程中實(shí)現(xiàn)一個(gè)類(lèi)似 Vue 的 v-model 的功能,感興趣的朋友跟隨小編一起看看吧
    2019-06-06
  • vue2.0中組件傳值的幾種方式總結(jié)

    vue2.0中組件傳值的幾種方式總結(jié)

    這篇文章主要介紹了vue2.0中組件傳值的幾種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue2中pinia刷新后數(shù)據(jù)丟失的問(wèn)題解決

    Vue2中pinia刷新后數(shù)據(jù)丟失的問(wèn)題解決

    Pinia是一個(gè)Vue.js狀態(tài)管理庫(kù),如果你在組件中修改了store中的數(shù)據(jù)并刷新了界面,Pinia會(huì)將store中的數(shù)據(jù)重置為初始值,從而導(dǎo)致數(shù)據(jù)丟失的問(wèn)題,本文就來(lái)介紹一下問(wèn)題解決,感興趣的可以了解一下
    2023-12-12
  • 概述VUE2.0不可忽視的很多變化

    概述VUE2.0不可忽視的很多變化

    本文給大家分析下vue2.0幾個(gè)重要的與自己目前項(xiàng)目相關(guān)的變化,也是vue2.0不可忽視的變化,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-09-09
  • Vue3使用customRef封裝防抖函數(shù)的方法詳解

    Vue3使用customRef封裝防抖函數(shù)的方法詳解

    防抖函數(shù)的作用是高頻率觸發(fā)的事件,在指定的單位時(shí)間內(nèi),只響應(yīng)最后一次,如果在指定的時(shí)間內(nèi)再次觸發(fā),則重新計(jì)算時(shí)間,本文將給大家詳細(xì)的介紹一下Vue3使用customRef封裝防抖函數(shù)的方法,需要的朋友可以參考下
    2023-09-09
  • vue 數(shù)據(jù)雙向綁定的實(shí)現(xiàn)方法

    vue 數(shù)據(jù)雙向綁定的實(shí)現(xiàn)方法

    這篇文章主要介紹了vue 數(shù)據(jù)雙向綁定的實(shí)現(xiàn)方法,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-03-03
  • vue2左側(cè)菜單欄收縮展開(kāi)功能實(shí)現(xiàn)

    vue2左側(cè)菜單欄收縮展開(kāi)功能實(shí)現(xiàn)

    vue2左側(cè)菜單欄收縮展開(kāi)目前是非常常見(jiàn)的,我們?cè)谌粘i_(kāi)發(fā)過(guò)程中經(jīng)常會(huì)碰到,這篇文章給大家介紹vue2左側(cè)菜單欄收縮展開(kāi)功能,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • 基于vue封裝一個(gè)帶眼睛的密碼子組件

    基于vue封裝一個(gè)帶眼睛的密碼子組件

    這篇文章給大家介紹了基于vue封裝一個(gè)帶眼睛的密碼子組件的方法,文章中有詳細(xì)的代碼講解,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-09-09
  • Vue.js 中的 $watch使用方法

    Vue.js 中的 $watch使用方法

    本篇文章中主要介紹了Vue.js 中的 $watch使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • vue配置vue.config.js超詳細(xì)教程

    vue配置vue.config.js超詳細(xì)教程

    Vue的配置項(xiàng)'vue.config.js'是用來(lái)配置Vue項(xiàng)目的構(gòu)建配置的,它是一個(gè)可選的配置文件,放置在項(xiàng)目的根目錄下,這篇文章主要給大家介紹了關(guān)于vue配置vue.config.js的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評(píng)論