欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何在vue中將echart封裝為組件

這篇文章主要介紹“如何在vue中將echart封裝為組件”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何在vue中將echart封裝為組件”文章能幫助大家解決問題。

成都創(chuàng)新互聯(lián)公司主營葉縣網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),葉縣h5微信小程序開發(fā)搭建,葉縣網(wǎng)站營銷推廣歡迎葉縣等地區(qū)企業(yè)咨詢

1. 安裝Echarts

首先第一步,肯定是安裝Echarts了。通過cd命令進入項目根目錄,然后敲以下命令行:

cnpm install echarts -S

安裝成功會如下顯示,package.json里的dependencies屬性也會自動加上Echarts依賴:

如何在vue中將echart封裝為組件

安裝Echarts

如何在vue中將echart封裝為組件

package.json

2.在vue項目中使用Echarts

安裝成功以后,我們先要考慮的是如何在vue項目中導(dǎo)入Echarts,并成功初始化一個圖表。

下面我會先建兩個.vue文件 chart.vue 和 radar-chart.vue 作為這次示例的基礎(chǔ)。 chart.vue的角色是調(diào)用雷達圖,radar-chart.vue的角色是提供雷達圖:

//chart.vue 
<template>
 <radar-chart></radar-chart>
</template>

<script>
 import RadarChart from '../components/radar-chart'
 export default {
  name: "chart",
  components: {RadarChart},
  component: RadarChart
 }
</script>
//radar-chart.vue
<template>
</template>
<script>
 export default {
   name: "radar-chart"
 }
</script>

好,正式創(chuàng)建一個Echarts圖表了

(1)在radar-chart.vue導(dǎo)入echart :

 // 引入基本模板
 import echarts from 'echarts/lib/echarts'
 // 引入雷達圖組件
 import 'echarts/lib/chart/radar'
 // 引入提示框和圖例組件
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/legend'

(2)創(chuàng)建圖表配置數(shù)據(jù),數(shù)據(jù)格式參考 Echarts官網(wǎng):

   const option = {
    tooltip: {},
    radar: {
     indicator: [{name: '體育', max: '100'}, {name: '數(shù)學(xué)', max: '100'}, {name: '化學(xué)', max: '100'}, {name: '勞動', max: '100'}, {name: '物理', max: '100'}],
     center: ['50%', '51%']
    },
    series: [{
     type: 'radar',
     itemStyle: {normal: {areaStyle: {type: 'default'}}},
     data: [
      {
       value: [58,56,78,64,98],
       name: '各項得分',
       itemStyle: {normal: {color: '#f0ad4e'}}
      }
     ]
    }]
   }

(3)初始化圖表:

  const chartObj = echarts.init(document.getElementById('radar'))
  chartObj.setOption(option)

上面幾步匯總為以下代碼,另外補充一點就是,創(chuàng)建配置數(shù)據(jù)option和初始化的時候,都要放在mounted鉤子函數(shù)里執(zhí)行,這樣才能保證獲取dom的是時候,dom已完成渲染:

//chart.vue 
<template>
 <radar-chart></radar-chart>
</template>

<script>
 import RadarChart from '../components/radar-chart'
 export default {
  name: "chart",
  components: {RadarChart},
  component: RadarChart
 }
</script>
//radar-chart.vue
<template>
 <div id="radar" class="container"> </div>
</template>

<script>
 // 引入基本模板
 import echarts from 'echarts/lib/echarts'
 // 引入雷達圖組件
 import 'echarts/lib/chart/radar'
 // 引入提示框和圖例組件
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/legend'
 export default {
  name: "radar-chart",
  mounted(){
   const option = { //創(chuàng)建圖表配置數(shù)據(jù)
    tooltip: {},
    radar: {
     indicator: [{name: '體育', max: '100'}, {name: '數(shù)學(xué)', max: '100'}, {name: '化學(xué)', max: '100'}, {name: '勞動', max: '100'}, {name: '物理', max: '100'}],
     center: ['50%', '51%']
    },
    series: [{
     type: 'radar',
     itemStyle: {normal: {areaStyle: {type: 'default'}}},
     data: [
      {
       value: [58,56,78,64,98],
       name: '各項得分',
       itemStyle: {normal: {color: '#f0ad4e'}}
      }
     ]
    }]
   }
   //初始化圖表
   const chartObj = echarts.init(document.getElementById('radar'))
   chartObj.setOption(option)
  }
 }
</script>
<style scoped>
 .container{width: 500px;height: 400px;}
</style>

出來的效果是這樣的:

如何在vue中將echart封裝為組件

效果一

3.將Echarts封裝為組件

上面我們已經(jīng)成功創(chuàng)建一個雷達圖了,但是很明顯的是,radar-chart.vue里的數(shù)據(jù)寫死的,無法重復(fù)調(diào)用。接下來著手封裝的事情了。

封裝的思路是這樣的:
(1)chart.vue向radar-chart.vue傳遞一組個性化數(shù)據(jù)
(2)radar-chart.vue通過props選項接收數(shù)據(jù)
(3)提煉接收到的數(shù)據(jù),覆蓋配置數(shù)據(jù)option
(4)初始化圖表
(如果對如何傳遞數(shù)據(jù)不理解,可以先看看我在開始的時候提到的,我的另一篇文章 —— “ vue之父子組件間通信實例講解(props、$ref 、 $emit )”)

具體代碼如下:

//chart.vue (父組件)

<template>
 <radar-chart :items="items"></radar-chart> //傳遞在子組件prop選項里約定好的數(shù)據(jù)
</template>

<script>
 import RadarChart from '../components/radar-chart'
 export default {
  name: "chart",
  components: {RadarChart},
  component: RadarChart,
  data () {
   return {
    items: [{name: '體育', value: 95, max: '100'}, {name: '數(shù)學(xué)', value: 55, max: '100'}, {name: '化學(xué)', value: 75, max: '100'}, {name: '勞動', value: 85, max: '100'}, {name: '烹飪', value: 85, max: '100'}]
   }
  }
 }
</script>
//radar-chart.vue (子組件)

<template>
 <div id="radar" class="container"> </div>
</template>

<script>
 // 引入基本模板
 import echarts from 'echarts/lib/echarts'
 // 引入雷達圖組件
 import 'echarts/lib/chart/radar'
 // 引入提示框和圖例組件
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/legend'
 export default {
  name: "radar-chart",
  props: {        //接受父組件傳遞來的數(shù)據(jù)
   items: {
    type: Array,
    default () {    //默認數(shù)據(jù),沒有數(shù)劇的情況下啟用
     return [{name: '生物', value: 95, max: '100'}, {name: '數(shù)學(xué)', value: 55, max: '100'}, {name: '語文', value: 86, max: '100'}, {name: '物理', value: 54, max: '100'}, {name: '美術(shù)', value: 59, max: '100'}]
    }
   },
  },
  mounted(){
   let values = [] //提煉接收到的數(shù)據(jù)
   this.items.forEach(el => {
    values.push(el.value)  
   })            
   const option = { //覆蓋配置數(shù)據(jù)option
    tooltip: {},
    radar: {
     indicator: this.items, 
     center: ['50%', '51%']
    },
    series: [{
     type: 'radar',
     itemStyle: {normal: {areaStyle: {type: 'default'}}},
     data: [
      {
       value: values, 
       name: '各項得分',
       itemStyle: {normal: {color: '#f0ad4e'}}
      }
     ]
    }]
   }
   //初始化
   const chartObj = echarts.init(document.getElementById('radar'))
   chartObj.setOption(option)
  }
 }
</script>
<style scoped>
 .container{width: 500px;height: 400px;}
</style>

封裝以后,就能傳遞自定義的數(shù)據(jù),反復(fù)調(diào)用了。上面代碼最后的效果是這樣的:

如何在vue中將echart封裝為組件

效果二

4.細節(jié)優(yōu)化

基本的功能已經(jīng)實現(xiàn)了,下面我們來優(yōu)化下一些細節(jié)。

不知道大家有沒發(fā)現(xiàn)radar-chart.vue里的<template>-id是寫死的,這會出現(xiàn)什么問題?當一個頁面調(diào)用兩次這個雷達圖組件,id就會重復(fù)了,從而報錯。

為了解決這個問題,我引入了uuid(vue-cli項目自帶,不需另外安裝),意在為每個生成的雷達圖配一個不重復(fù)的隨機id。還需要注意的是,我們要在created()方法里去做這個生成id的事情,如果寫在mounted了就會出現(xiàn)無法初始化的情況,因為來不及渲染新的ID,就執(zhí)行document.getElementById()了,具體代碼如下:

<template>
 <div>
  <radar-chart :items="items_one"></radar-chart>
  <radar-chart :items="items_two"></radar-chart>
 </div>
</template>

<script>
 import RadarChart from '../components/radar-chart'
 export default {
  name: "chart",
  components: {RadarChart},
  component: RadarChart,
  data () {
   return {
    items_one: [{name: '體育', value: 95, max: '100'}, {name: '數(shù)學(xué)', value: 55, max: '100'}, {name: '化學(xué)', value: 75, max: '100'}, {name: '勞動', value: 85, max: '100'}, {name: '烹飪', value: 85, max: '100'}],
    items_two: [{name: '體育', value: 22, max: '100'}, {name: '數(shù)學(xué)', value: 55, max: '100'}, {name: '化學(xué)', value: 75, max: '100'}, {name: '勞動', value: 85, max: '100'}, {name: '烹飪', value: 85, max: '100'}]
   }
  }
 }
</script>
<template>
 <div :id="elId" class="container"> </div>
</template>

<script>
 // 引入基本模板
 import echarts from 'echarts/lib/echarts'
 // 引入雷達圖組件
 import 'echarts/lib/chart/radar'
 // 引入提示框和圖例組件
 import 'echarts/lib/component/tooltip'
 import 'echarts/lib/component/legend'
 //引入uuid文件
 import uuidv1 from 'uuid/v1' 
 export default {
  name: "radar-chart",
  props: {
   items: {
    type: Array,
    default () {
     return [{name: '生物', value: 95, max: '100'}, {name: '數(shù)學(xué)', value: 55, max: '100'}, {name: '語文', value: 86, max: '100'}, {name: '物理', value: 54, max: '100'}, {name: '美術(shù)', value: 59, max: '100'}]
    }
   },
  },
  data () {
   return {
    elId: ''
   }
  },
  created(){
   this.elId = uuidv1() //獲取隨機id
  },
  mounted(){
   let values = []
   this.items.forEach(el => {
    values.push(el.value)
   })
   const option = {
    tooltip: {},
    radar: {
     indicator: this.items,
     center: ['50%', '51%']
    },
    series: [{
     type: 'radar',
     itemStyle: {normal: {areaStyle: {type: 'default'}}},
     data: [
      {
       value: values,
       name: '各項得分',
       itemStyle: {normal: {color: '#f0ad4e'}}
      }
     ]
    }]
   }
   const chartObj = echarts.init(document.getElementById(this.elId));
   chartObj.setOption(option)
  }
 }
</script>
<style scoped>
 .container{width: 500px;height: 400px;}
</style>

成功解決重復(fù)id的問題:

如何在vue中將echart封裝為組件

關(guān)于“如何在vue中將echart封裝為組件”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

網(wǎng)站欄目:如何在vue中將echart封裝為組件
網(wǎng)頁路徑:http://www.aaarwkj.com/article18/ipddgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、品牌網(wǎng)站制作、網(wǎng)站建設(shè)、Google建站公司、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
东京成人热av男人的天堂| 亚洲天堂av日韩在线| 欧美颜射一区二区三区| 亚洲av乱码久久精品蜜桃| 亚洲乱人伦一区二区三区| 女人的天堂啪啪啪av| 另类视频在线观看免费| 久久国产精品一品二品| 中文字幕在线视频黄字幕| 成人亚洲精品一区二区三区| 日韩在线视频免费不卡一区| 人妻操人人妻中出av| 日韩在线不卡一二三| 国产毛毛片一区二区三区| va精品人妻一区二区三区| 91精品国产老熟女在线| 亚洲伦理在线一区二区| 日韩精品中文字幕欧美激情| 国产精品熟女在线视频| 日韩精品视频一区二区在线观看| 国产精品国产亚洲精品看不| 91女厕偷拍女厕偷拍| 色综合久久婷婷色综合网| 久久久亚洲精品中文字幕蜜桃| 国产免费av一区二区在线观看| 精品成人乱色一区二区| 久久综合视频大片视频| 亚洲视一区二区三区四区| 美女高潮呻吟免费观看久久久 | 精品色欧美色国产一区国产| 公侵犯人妻中文字幕一区| 精品妇女一区二区三区| 日韩视频精品一区二区| 日韩丰满少妇在线观看| 日本高清av一区二区| av二区不卡国产精品| 欧美日本国产在线一区二区| 一区二区三区在线观看日韩| 午夜免费成人在线视频| 国产黄片大秀在线观看| 日本韩国三级理伦久久久|