• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:57:11
    文檔

    vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題

    vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題:問(wèn)題復(fù)現(xiàn):父組件中通過(guò)名為 source 的 prop 向子組件 Chart 傳入數(shù)據(jù) <Chart :source=chartData></Chart> import Chart from '../components/Chart' export default { name: 'Home', com
    推薦度:
    導(dǎo)讀vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題:問(wèn)題復(fù)現(xiàn):父組件中通過(guò)名為 source 的 prop 向子組件 Chart 傳入數(shù)據(jù) <Chart :source=chartData></Chart> import Chart from '../components/Chart' export default { name: 'Home', com

    在代碼中增加一行代碼:

    watch: {
     source (newVal, oldVal) {
     console.log(newVal, this.$refs.main) // [Array ...] undefined
     this.setOpts()
     }
     },
    

    啟示 source 數(shù)據(jù)雖然有了,但 div 還并未掛載,因此 echarts 無(wú)法完成初始化

    那么想當(dāng)然的我們就會(huì)去在 mounted 生命周期函數(shù)中調(diào)用 setOpts 方法:

    mounted () {
     console.log(this.source, this.$refs.main) // [] undefined
     this.setOpts()
     },
    

    這樣也是錯(cuò)的,因?yàn)槟0逭Z(yǔ)法中使用了 v-if,那么當(dāng) source 并未滿足條件的時(shí)候,div 當(dāng)然也不會(huì)掛載。因此 div 仍然無(wú)法訪問(wèn)到。

    Error in mounted hook: "TypeError: Cannot read property 'getAttribute' of undefined"

    解決辦法是要么去掉 v-if 要么換另一種寫(xiě)法

    有時(shí)我們需要在沒(méi)有數(shù)據(jù)的情況下增加一個(gè)占位標(biāo)簽用來(lái)展示一些額外的提醒信息,如“暫未獲取到數(shù)據(jù)”等。那么去掉 v-if 肯定不行。

    既然如此我們保留 v-if 但寫(xiě)法有所改變:

    修改 Chart 組件:

    <template>
     <div>
     <div id="main" ref="main" style="width: 600px;height: 400px;"></div>
     </div>
    </template>
    

    我們只需要一個(gè) source 數(shù)據(jù)源,當(dāng) mounted 的時(shí)候調(diào)用 setOpts 方法,當(dāng) watch 數(shù)據(jù)變化的時(shí)候再次調(diào)用以更新數(shù)據(jù)

    export default {
     name: 'Chart',
     props: ['source'],
     mounted () {
     this.setOpts()
     },
     watch: {
     source () {
     this.setOpts()
     }
     },
     methods: {
     setOpts () {
     let myChart = this.$echarts.init(this.$refs.main)
     myChart.setOption({
     dataset: {
     dimensions: ['score', 'amount', 'product'],
     source: this.source
     },
     xAxis: { type: 'category' },
     yAxis: {},
     series: [
     {
     type: 'bar',
     encode: {
     x: 'product',
     y: 'amount'
     }
     }
     ]
     })
     }
     }
    }

    v-if 的判斷我們把他移出去了我們判斷 chartData 是否獲取到,一旦獲取到數(shù)據(jù),馬上加載 Chart 組件,這樣就可以避開(kāi)在組件內(nèi)部調(diào)用 v-if 帶來(lái)的問(wèn)題:

    <template>
     <div>
     <Chart :source="chartData" v-if="flag"></Chart>
     <div v-else>none</div>
     </div>
    </template>
    import Chart from '../components/Chart'
    
    export default {
     name: 'Home',
     components: { Chart },
     data () {
     return {
     chartData: [],
     flag: false
     }
     },
     methods: {
     getData () {
     setTimeout(() => {
     this.chartData = [
     [89.3, 58212, 'Matcha Latte'],
     [57.1, 78254, 'Milk Tea'],
     [74.4, 41032, 'Cheese Cocoa'],
     [50.1, 12755, 'Cheese Brownie'],
     [89.7, 20145, 'Matcha Cocoa'],
     [68.1, 79146, 'Tea'],
     [19.6, 91852, 'Orange Juice'],
     [10.6, 101852, 'Lemon Juice'],
     [32.7, 20112, 'Walnut Brownie']
     ]
     this.flag = true
     }, 2000)
     }
     },
     mounted () {
     this.getData()
     }
    }
    
    

    另外還可將 Chart 組件和站位標(biāo)簽一同封裝成一個(gè) ChartWrapper。

    這樣就不會(huì)因在組件內(nèi)部調(diào)用 watch 監(jiān)聽(tīng) props 的變化動(dòng)態(tài) v-if 判斷并掛載數(shù)據(jù)到 DOM 上出現(xiàn)的這種問(wèn)題了。

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題

    vue組件中watch props根據(jù)v-if動(dòng)態(tài)判斷并掛載DOM的問(wèn)題:問(wèn)題復(fù)現(xiàn):父組件中通過(guò)名為 source 的 prop 向子組件 Chart 傳入數(shù)據(jù) <Chart :source=chartData></Chart> import Chart from '../components/Chart' export default { name: 'Home', com
    推薦度:
    • 熱門(mén)焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門(mén)推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲av无码乱码国产精品fc2| 国产精品午夜一级毛片密呀 | 56prom精品视频在放免费| 欧美成人精品一区二区综合| 久久香蕉国产线看观看精品yw| 精品一区二区无码AV| 无码精品一区二区三区免费视频 | 国产精品手机在线观看你懂的| 少妇伦子伦精品无码STYLES| 久久久精品免费国产四虎| 麻豆国产在线精品国偷产拍| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲精品福利视频| 亚洲日韩精品A∨片无码| 久久精品国产精品亚洲艾草网美妙 | 亚洲精品无码永久在线观看你懂的 | 精品无码国产污污污免费网站国产| 99re这里只有精品国产精品| 免费精品无码AV片在线观看| 伊人久久精品影院| 欧美精品黑人粗大| 久夜色精品国产一区二区三区| 99久久婷婷国产综合精品草原| 麻豆精品久久精品色综合| 亚洲AV永久青草无码精品| 尤物yw午夜国产精品视频| 精品成人一区二区三区四区| 99久久精品国产一区二区蜜芽| 欧美精品人爱c欧美精品| 91精品国产91久久综合| 凹凸69堂国产成人精品视频| 亚洲精品无码永久在线观看你懂的 | 国产精品视频二区不卡| 国产精品无套内射迪丽热巴| 日韩国产精品无码一区二区三区| 亚洲国产精品嫩草影院在线观看| 亚洲精品无码不卡| 国产精品VIDEOSSEX久久发布 | 欧美精品一区二区精品久久| 国产精品三级在线| 久久精品国产精品亚洲精品|