1. 程式人生 > 實用技巧 >【小程式】---- 封裝Echarts公共元件,遍歷圖表實現多個餅圖

【小程式】---- 封裝Echarts公共元件,遍歷圖表實現多個餅圖

一、問題描述:

在小程式的專案中,封裝公共的餅圖元件,並在需要的頁面引入使用。要求一個頁面中有多個餅圖,動態渲染不同的資料。

二、效果實現:

1. 檢視——小程式使用Echarts的方式

2. 封裝餅圖公共元件

// pie.wxml

<view class="containers">
  <ec-canvas id="mychart-dom-bar" canvas-id="mychart-bar" ec="{{ ec }}" tuData="{{ pieData }}"></ec-canvas> // tuData是自定義的
</view>
// pie.json

{
  "usingComponents": {
    "ec-canvas": "../../ec-canvas/ec-canvas" // 下載的微信版Echarts
  },
  "component": true
}
// pie.js

import * as echarts from '../../ec-canvas/echarts';

function initChart(canvas, width, height, dpr, pieData) { // 這裡多加了pieData引數
  const chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr 
// 畫素 }); canvas.setChart(chart); // console.log('資料:',pieData) // pieData為頁面傳過來的陣列資料:[[分類],[分類顏色],[標籤字大小,標籤字顏色],分類一資料,分類二資料] let option = { title: {}, tooltip: { trigger: 'item', formatter: '{b} : {c}' }, legend: { left: 'center', bottom: 20, textStyle: { fontSize: pieData[
2][0], color: pieData[2][1] }, data: pieData[0] }, color: pieData[1], // color: ['#FD7031','#00d6a5'], series: [{ name: '客戶', type: 'pie', radius: '60%', center: ["45%", "38%"], label: { position: 'inner', show: true, formatter: '{c}' }, data: [{ value: pieData[3] ? pieData[3] : 0, name: pieData[0][0], // name: '已聯絡客戶', formatter: '{c}', tooltip: { trigger: 'item', formatter: '{b} : {c}' } }, { // name: '未聯絡客戶', value: pieData[4] ? pieData[4] : 0, name: pieData[0][1], formatter: '{c}', tooltip: { trigger: 'item', formatter: '{b} : {c}' } } ], emphasis: { itemStyle: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } }, }] }; chart.setOption(option); return chart; } Component({
// 接收頁面傳遞過來的 pieData 餅圖資料 properties: { pieData: { type: Array } }, data: { ec: { onInit: initChart } } })

3. Page頁面遍歷 pie 餅圖元件,並傳過去需要的資料

(1) 通過 showPie 控制是否使用 pie 元件,當餅圖有資料時使用,當切換頁面時銷燬。這是為了解決展示的餅圖無法更新資料的問題。

(2) 成功從介面獲取到餅圖資料後,為頁面每個餅圖需要用到的要傳遞的 pieData 資料賦值。

4.修改ec-canvas.js檔案 (這個檔案是從echarts官網下載的)

(1) 在wxml檔案裡,引用ec-canvas元件時,傳了個tuData引數過去,所以我們需要在元件內部接收一下,在ec-canvas.js檔案裡面找到properties物件。

(2) 找到init方法,將tuData傳入onInit方法裡。