国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答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
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 21:57:11
文檔

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

vue組件中watch props根據(jù)v-if動態(tài)判斷并掛載DOM的問題:問題復現(xiàn):父組件中通過名為 source 的 prop 向子組件 Chart 傳入數(shù)據(jù) <Chart :source=chartData></Chart> import Chart from '../components/Chart' export default { name: 'Home', com
推薦度:
導讀vue組件中watch props根據(jù)v-if動態(tài)判斷并掛載DOM的問題:問題復現(xiàn):父組件中通過名為 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 無法完成初始化

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

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

這樣也是錯的,因為模板語法中使用了 v-if,那么當 source 并未滿足條件的時候,div 當然也不會掛載。因此 div 仍然無法訪問到。

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

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

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

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

修改 Chart 組件:

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

我們只需要一個 source 數(shù)據(jù)源,當 mounted 的時候調(diào)用 setOpts 方法,當 watch 數(shù)據(jù)變化的時候再次調(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 組件,這樣就可以避開在組件內(nèi)部調(diào)用 v-if 帶來的問題:

<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 組件和站位標簽一同封裝成一個 ChartWrapper。

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

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

文檔

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

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 久久一次| 91久久国产综合精品女同我 | 女人18毛片a级毛片一区②区 | 日韩在线一区二区三区免费视频 | 亚洲欧美日本在线 | 亚洲美女一区二区三区 | 亚洲欧美日韩综合网导航 | 国产美女精品久久久久中文 | 亚洲一区二区三区中文字幕 | 香蕉久久一区二区三区 | 久久国产一区二区 | 日韩无 | 国产精品欧美激情在线播放 | 精品欧美一区二区在线观看欧美熟 | 亚洲一区 中文字幕 久久 | 欧美日韩一区二区三区在线 | 国产成人深夜福利短视频99 | 中文字幕日本一本二本三区 | 九九精品视频一区在线 | 亚洲欧洲综合 | 日本我不卡 | 国内精品一区二区三区 | 亚洲一区二区三区四区视频 | 日本中文字幕有码 | 91精品国产高清91久久久久久 | 免费一级 | 国产高清美女一级a毛片久久 | 精品在线一区 | 久久综合中文字幕一区二区 | 欧美成人一区二区三区在线视频 | 91在线中文 | 国内精品视频一区二区三区 | 亚洲 自拍 另类 欧美 综合 | 国产成人精品三区 | 欧美一区二 | 又黄又爽无遮挡免费视频 | 日本不卡一区二区三区四区 | 欧美综合图区 | 精品精品国产高清a毛片牛牛 | 在线观看国产精品入口 | 国产高清美女一级毛片久久 |