中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue中如何將echart封裝為組件

發布時間:2022-11-22 09:30:22 來源:億速云 閱讀:165 作者:iii 欄目:開發技術

這篇文章主要介紹“vue中如何將echart封裝為組件”,在日常操作中,相信很多人在vue中如何將echart封裝為組件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vue中如何將echart封裝為組件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1. 安裝Echarts

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

cnpm install echarts -S

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

vue中如何將echart封裝為組件

安裝Echarts

vue中如何將echart封裝為組件

package.json

2.在vue項目中使用Echarts

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

下面我會先建兩個.vue文件 chart.vue 和 radar-chart.vue 作為這次示例的基礎。 chart.vue的角色是調用雷達圖,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>

好,正式創建一個Echarts圖表了

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

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

(2)創建圖表配置數據,數據格式參考 Echarts官網:

   const option = {
    tooltip: {},
    radar: {
     indicator: [{name: '體育', max: '100'}, {name: '數學', max: '100'}, {name: '化學', 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)

上面幾步匯總為以下代碼,另外補充一點就是,創建配置數據option和初始化的時候,都要放在mounted鉤子函數里執行,這樣才能保證獲取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 = { //創建圖表配置數據
    tooltip: {},
    radar: {
     indicator: [{name: '體育', max: '100'}, {name: '數學', max: '100'}, {name: '化學', 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>

3.將Echarts封裝為組件

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

封裝的思路是這樣的:
(1)chart.vue向radar-chart.vue傳遞一組個性化數據
(2)radar-chart.vue通過props選項接收數據
(3)提煉接收到的數據,覆蓋配置數據option
(4)初始化圖表

具體代碼如下:

//chart.vue (父組件)

<template>
 <radar-chart :items="items"></radar-chart> //傳遞在子組件prop選項里約定好的數據
</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: '數學', value: 55, max: '100'}, {name: '化學', 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: {        //接受父組件傳遞來的數據
   items: {
    type: Array,
    default () {    //默認數據,沒有數劇的情況下啟用
     return [{name: '生物', value: 95, max: '100'}, {name: '數學', value: 55, max: '100'}, {name: '語文', value: 86, max: '100'}, {name: '物理', value: 54, max: '100'}, {name: '美術', value: 59, max: '100'}]
    }
   },
  },
  mounted(){
   let values = [] //提煉接收到的數據
   this.items.forEach(el => {
    values.push(el.value)  
   })            
   const option = { //覆蓋配置數據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>

封裝以后,就能傳遞自定義的數據,反復調用了

4.細節優化

基本的功能已經實現了,下面我們來優化下一些細節。

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

為了解決這個問題,我引入了uuid(vue-cli項目自帶,不需另外安裝),意在為每個生成的雷達圖配一個不重復的隨機id。還需要注意的是,我們要在created()方法里去做這個生成id的事情,如果寫在mounted了就會出現無法初始化的情況,因為來不及渲染新的ID,就執行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: '數學', value: 55, max: '100'}, {name: '化學', value: 75, max: '100'}, {name: '勞動', value: 85, max: '100'}, {name: '烹飪', value: 85, max: '100'}],
    items_two: [{name: '體育', value: 22, max: '100'}, {name: '數學', value: 55, max: '100'}, {name: '化學', 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: '數學', value: 55, max: '100'}, {name: '語文', value: 86, max: '100'}, {name: '物理', value: 54, max: '100'}, {name: '美術', 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>

Vue的優點

Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。

到此,關于“vue中如何將echart封裝為組件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜良县| 汉源县| 泽库县| 衡阳县| 竹山县| 柳林县| 灵武市| 郑州市| 宣威市| 上虞市| 茶陵县| 丹阳市| 无锡市| 和平县| 宿迁市| 临沭县| 项城市| 江都市| 博乐市| 昌吉市| 依兰县| 金乡县| 井冈山市| 昌平区| 阳泉市| 青州市| 永德县| 兴隆县| 闸北区| 临泉县| 突泉县| 南和县| 丹寨县| 武汉市| 砀山县| 毕节市| 海伦市| 吐鲁番市| 惠水县| 香港| 班戈县|