小程式開發:如何給echartInit() 動態傳參到data[]?

GeekQiaQia發表於2019-04-13

在微信小程式中使用Echarts

在小程式中如何引用ECharts: 引用方式可檢視ECharts官網

在開發過程中,我們需要從後臺獲取需要ECharts 展示的data資料;然後傳遞到ec-charts 元件當中,展示最新獲取到的動態圖表;

小程式開發:如何給echartInit() 動態傳參到data[]?

微信小程式中如何給ECharts 中動態傳參到data[] ?

“talk is cheap,show me the code ”

// 以下以ECharts-Pie 作為示例:

detail.wxss:


.pieContainer {
  position:absolute;
  top:60vh;
  bottom:0;
  left:18px;
  right:0;
  width:50vw;
  height:100px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:space-between;
  box-sizing:border-box;

} 
ec-canvas {
    width: 100%;
    height: 100%;
    /*border:1px solid red;*/
}
複製程式碼

detail.wxml:

<view class="pieContainer">

  <ec-canvas 
  id="mychart-dom-pie" 
  canvas-id="mychart-pie"
  ec="{{ ec }}"
  bind:init="echartInit" 
  data-record="{{recordData}}">
  
  </ec-canvas>
</view>
複製程式碼

與官網相比:

  • wxml檔案中,ec-canvas標籤中,比官網示例中多了一個data-record 屬性;屬性中繫結的是detail.js中data 資料如下:
detail.js:
// pages/detail/detail.js
import * as echarts from '../../packages/ec-canvas/echarts';

const app = getApp();
function initChart(canvas, width, height,recordData) {
    const chart = echarts.init(canvas, null, {
        width: width,
        height: height
    });

    canvas.setChart(chart);

    var option = {
        backgroundColor: "#ffffff",
        color: ["#14DA12","#DA0D07","#FFDB5C" ],
        series: [{
            label: {
                normal: {
                    fontSize: 14
                }
            },
            labelLine:{
                normal:{
                    length:5,  // 改變標示線的長度
                    lineStyle: {
                        color: "black"  // 改變標示線的顏色
                    }
                },
            },
            name:'赴約記錄',
            type: 'pie',
            center: ['50%', '50%'],
            radius: [0, '60%'],
            data:[],
            itemStyle: {
                emphasis: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 2, 2, 0.3)'
                }
            }
        }]
    };

    option.series[0].data=recordData;
    chart.setOption(option);
    return chart;
}


Page({

  /**
   * 頁面的初始資料
   */
  data: {
  
      ec: {
      },
      recordData:[{
          value: 9,
          name: '赴約'
      }, {
          value: 1,
          name: '爽約'
      },{
          value: 2,
          name: '取消'
      }
      ]
  },

    echartInit(e) {
       console.log(e);
       let recordData=e.target.dataset.record;
        initChart(e.detail.canvas, e.detail.width, e.detail.height,recordData);
    },

  /**
   * 生命週期函式--監聽頁面載入
   */
  onLoad: function (options) {
      this.setData({
          signature: app.globalData.accountInfo.signature
      });
  },

  /**
   * 生命週期函式--監聽頁面初次渲染完成
   */
  onReady: function () {

  },


  /**
   * 生命週期函式--監聽頁面顯示
   */
  onShow: function () {

  },

  /**
   * 生命週期函式--監聽頁面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命週期函式--監聽頁面解除安裝
   */
  onUnload: function () {

  },

  /**
   * 頁面相關事件處理函式--監聽使用者下拉動作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁面上拉觸底事件的處理函式
   */
  onReachBottom: function () {

  },

  /**
   * 使用者點選右上角分享
   */
  onShareAppMessage: function () {

  }
})
複製程式碼

與官網示例相比,在以上程式碼中:

  • function initChart(canvas, width, height,recordData);多了一個引數recordData;
  • 將option.series[0].data陣列設定為空陣列,並由傳參的方式傳遞賦值:option.series[0].data=recordData;

思考總結:

在wxml中ec-chart 元件引入後,相當於一個html標籤,繫結的函式仍有一樣的event引數;

我們通過瀏覽器檢視以下程式碼中的log日誌發現:

echartInit(e) {
       console.log(e);
       let recordData=e.target.dataset.record;
        initChart(e.detail.canvas, e.detail.width, e.detail.height,recordData);
    },
複製程式碼

小程式開發:如何給echartInit() 動態傳參到data[]?

e.target.dataset.record正是 detail.wxml 中的data-record 屬性:

 <ec-canvas 
  id="mychart-dom-pie" 
  canvas-id="mychart-pie"
  ec="{{ ec }}"
  bind:init="echartInit" 
  data-record="{{recordData}}">
  
  </ec-canvas>
  
傳遞資料內容正是detail.js中的data 屬性值:
recordData:[{
          value: 9,
          name: '赴約'
      }, {
          value: 1,
          name: '爽約'
      },{
          value: 2,
          name: '取消'
      }
      ]
複製程式碼

相關文章