最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談父子組件傳值問(wèn)題

 更新時(shí)間:2023年04月07日 14:16:28   作者:右眸Remnant  
這篇文章主要介紹了Vue父子組件傳值問(wèn)題,文章中有詳細(xì)的示例代碼,感興趣的同學(xué)可以參考閱讀

一、問(wèn)題描述

想要搭建一個(gè)模型檢驗(yàn)的頁(yè)面,在點(diǎn)擊按鈕“開(kāi)始檢測(cè)”后,后端會(huì)獲取相應(yīng)數(shù)據(jù)、頁(yè)面跳轉(zhuǎn)并進(jìn)行渲染。

主要涉及三個(gè)頁(yè)面:index.vue、BorderCard.vue、CardResult.vue,如圖1:

在這里插入圖片描述

index.vue想要引入“步驟條”實(shí)現(xiàn)兩個(gè)組件的切換效果,如圖2:

在這里插入圖片描述

index.vue中引入兩個(gè)組件的部分:

<border-card v-show="active === 0" :tab-index="active"/>
<card-result v-show="active === 1" />

相關(guān)部分代碼如下:

// BorderCard.vue
<template>
<el-button style="position: absolute;top:-48px;right:20px;z-index: 999999;" @click="next">立即檢測(cè)</el-button>
</template>
<script>
methods: {
	next() {
	  /** 點(diǎn)擊立即檢測(cè)按鈕后,發(fā)送請(qǐng)求從后端獲取數(shù)據(jù)(圖表模型的正確率,數(shù)據(jù)信息等),然后利用 this.$emit -> 父組件 -> CardResult.vue
	  */
      console.log('handleModelTrain....');
      this.$http.post('').then(res => {
        console.log('handleModelTrain=>', res);
        this.$emit('next', res.data.data)
      }).catch(() => {
        this.$message.error('模型訓(xùn)練異常')
      })
    },
}
</script>
// index.vue
<template>
<border-card v-show="active === 0" :tab-index="active" @next="handleNextTabs" />
<card-result v-show="active === 1" :model-report="modelReport" />
</template>
<script>
methods: {
	handleNextTabs(data) {
      console.log('recall=>', data);
      if (!data) {
        this.$message.error('模型訓(xùn)練異常')
      }
      // 數(shù)據(jù)解析
      this.show_info.total = data.data_total
      this.modelReport = data
      if (this.active++ > 1) this.active = 0;
    },
}
// CardResult.vue
<script>
props: {
    modelReport: {
      type: Object,
      default: () => {
        return {
          score: 0,
          report: ''
        }
      }
    }
  },
  watch: {
    modelReport: {
      handler: function(newVal, oldVal) {
        console.log('watch modelReport=>', newVal, oldVal);
        // 更新圖表
        this.getEchartDataInit(false)
        // 更新表格
        this.getTableDataForReport(newVal)
      },
      deep: true
    }
  }

單獨(dú)呈現(xiàn) CardResult.vue組件如圖

在這里插入圖片描述

當(dāng)組件切換后,下面數(shù)據(jù)報(bào)告正常顯示,但是圖像發(fā)生了變形:

在這里插入圖片描述

二、問(wèn)題解決

查閱相關(guān)文章,其中原因包括:

  • 采用v-show控制切換時(shí),v-show為false時(shí),echarts圖并不能獲取外部容器的正常寬高,所以展示出來(lái)的圖形會(huì)以其自身默認(rèn)的大小展示;解決方法-> 在切換到圖時(shí)重新調(diào)用圖組件

根據(jù)上面說(shuō)法,我理解的是切換組件的時(shí)候重新進(jìn)行加載,相關(guān)博客建議使用組件 :key 屬性,當(dāng)發(fā)生變化后會(huì)重新加載組件,代碼如下:

<border-card v-show="active === 0" :key="active" :tab-index="active" @next="handleNextTabs" />
<card-result v-show="active === 1" :key="!active" :model-report="modelReport" />

更改后的效果如圖:

在這里插入圖片描述

此處組件傳值失效的具體原因不清楚。是否和組件傳值先被props接受,然后發(fā)生了組件重新加載有關(guān)

因此查找相關(guān)問(wèn)題:Vue刷新后頁(yè)面數(shù)據(jù)丟失問(wèn)題的解決過(guò)程
解決方案:使用 SessionStorage 進(jìn)行處理。
相關(guān)部分代碼如下:

// index.vue
<script>
methods: {
    handleNextTabs(data) {
      console.log('recall=>', data);
      if (!data) {
        this.$message.error('模型訓(xùn)練異常')
      }
      this.show_info.total = data.data_total
      this.modelReport = data
      // 將數(shù)據(jù)存儲(chǔ)到sessionStorage
      sessionStorage.setItem('modelReport', JSON.stringify(this.modelReport))
      if (this.active++ > 1) this.active = 0;
    }
}
</script>
// CardResult.vue
<script>
created() {
    console.log('CardResult created...');
    if (sessionStorage.getItem('modelReport')) {
      this.modelReport = sessionStorage.getItem('modelReport') // 獲取數(shù)據(jù)直接更新
    }
  },
  beforeDestroy() {
    // 毀滅前先移除掉,否則我跳轉(zhuǎn)到其它地方,sessionStorage里面依舊存在著
    console.log('CardResult beforeDestroy...');
    sessionStorage.removeItem('modelReport')
  }
}
</script>

然而發(fā)生下列錯(cuò)誤,如圖:

在這里插入圖片描述

為了避免直接改變prop中的值,因此我考慮繼續(xù)使用 this.$emit -> index.vue,由于此時(shí)組件沒(méi)有發(fā)生切換,因此不會(huì)觸發(fā)組件的重新加載,然后實(shí)現(xiàn)賦值

修改后,部分相關(guān)代碼如下:

// CardResult.vue
<script>
created() {
    console.log('CardResult created...');
    if (sessionStorage.getItem('modelReport')) {
      this.$emit('refreshData', JSON.parse(sessionStorage.getItem('modelReport')))
    }
  },
  beforeDestroy() {
    // 毀滅前先移除掉,否則我跳轉(zhuǎn)到其它地方,sessionStorage里面依舊存在著
    console.log('CardResult beforeDestroy...');
    sessionStorage.removeItem('modelReport')
  }
}
</script>
<template>
	<border-card v-show="active === 0" :key="active" :tab-index="active" @next="handleNextTabs" />
	<card-result v-show="active === 1" :key="!active" :model-report="modelReport" @refreshData="refreshDataParent" />
</template>
<script>
methods: {
	refreshDataParent(val) {
      console.log('refreshDataParent recall...');
      this.modelReport = val
    }
}
</script>

運(yùn)行結(jié)果如圖,目前能夠正常顯示:
在這里插入圖片描述

到此這篇關(guān)于淺談父子組件傳值問(wèn)題的文章就介紹到這了,更多相關(guān)父子組件傳值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端數(shù)據(jù)存儲(chǔ)常用工具Vuex、Pinia、Redux詳解

    前端數(shù)據(jù)存儲(chǔ)常用工具Vuex、Pinia、Redux詳解

    Redux、Vuex 和 Pinia 都是用于狀態(tài)管理的流行框架,這篇文章主要介紹了前端數(shù)據(jù)存儲(chǔ)常用工具Vuex、Pinia、Redux的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的示例代碼

    Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的示例代碼

    在當(dāng)今數(shù)字化的時(shí)代,用戶(hù)體驗(yàn)的優(yōu)化至關(guān)重要,物流信息的展示作為電商和供應(yīng)鏈領(lǐng)域中的關(guān)鍵環(huán)節(jié),其呈現(xiàn)方式直接影響著用戶(hù)對(duì)貨物運(yùn)輸狀態(tài)的感知和滿(mǎn)意度,所以本文介紹了Vue實(shí)現(xiàn)縱向的物流時(shí)間軸效果的方法,需要的朋友可以參考下
    2024-08-08
  • vue實(shí)現(xiàn)釘釘?shù)目记谌諝v

    vue實(shí)現(xiàn)釘釘?shù)目记谌諝v

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)釘釘?shù)目记谌諝v,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • vue2中的keep-alive使用總結(jié)及注意事項(xiàng)

    vue2中的keep-alive使用總結(jié)及注意事項(xiàng)

    vue2.0提供了一個(gè)keep-alive組件用來(lái)緩存組件,避免多次加載相應(yīng)的組件,減少性能消耗。本文給大家介紹vue2中的keep-alive使用總結(jié)及注意事項(xiàng),需要的朋友參考下吧
    2017-12-12
  • vue可用于拖動(dòng)排序組件示例

    vue可用于拖動(dòng)排序組件示例

    這篇文章主要為大家介紹了vue可用于拖動(dòng)排序組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Vue中如何動(dòng)態(tài)顯示表格內(nèi)容

    Vue中如何動(dòng)態(tài)顯示表格內(nèi)容

    這篇文章主要介紹了Vue中如何動(dòng)態(tài)顯示表格內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • uniapp模仿微信實(shí)現(xiàn)聊天界面的示例代碼

    uniapp模仿微信實(shí)現(xiàn)聊天界面的示例代碼

    這篇文章主要介紹了如何利用uniapp模仿微信,實(shí)現(xiàn)一個(gè)聊天界面。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Vue有一定的幫助,感興趣的可以了解一下
    2022-01-01
  • vue中v-mode詳解及使用示例詳解

    vue中v-mode詳解及使用示例詳解

    這篇文章主要介紹了vue中v-mode詳解以及具體的使用示例,在組件中使用?v-model?時(shí),需要定義model選項(xiàng),指定綁定的prop和事件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Vue?日期獲取的示例代碼

    Vue?日期獲取的示例代碼

    moment.js是一款現(xiàn)在對(duì)時(shí)間處理的強(qiáng)大的函數(shù),這篇文章主要介紹了Vue?日期獲取的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Vue3?Axios攔截器封裝成request文件的示例詳解

    Vue3?Axios攔截器封裝成request文件的示例詳解

    這篇文章主要介紹了Vue3?Axios攔截器封裝成request文件,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評(píng)論

日照市| 丹寨县| 渭南市| 木兰县| 宁波市| 汤阴县| 古丈县| 循化| 镇安县| 永靖县| 小金县| 阳谷县| 郯城县| 哈密市| 天等县| 寿光市| 曲周县| 新蔡县| 吉木乃县| 贡山| 德令哈市| 民县| 东明县| 周宁县| 鄢陵县| 锡林郭勒盟| 色达县| 渭南市| 鹤庆县| 龙江县| 华亭县| 府谷县| 师宗县| 九寨沟县| 喀喇| 望城县| 桦甸市| 通榆县| 西乌珠穆沁旗| 福海县| 河池市|