基于echart實現(xiàn)動態(tài)加載微信云平臺數(shù)據(jù)庫的數(shù)據(jù)

微信小程序的云開發(fā)平臺提供了三個基礎(chǔ)能力:數(shù)據(jù)庫、存儲和云函數(shù)。我們這次利用微信小程序的云平臺數(shù)據(jù)庫的數(shù)據(jù),通過echart這個前端可視化框架,實現(xiàn)百度2016、2017年每個季度的營收數(shù)據(jù)展示。

微信的云數(shù)據(jù)庫是JSON 數(shù)據(jù)庫,顧名思義,數(shù)據(jù)庫中的每條記錄都是一個 JSON 格式的對象。每一張表可以看成一個 JSON 數(shù)組。這里吐槽一下csv導(dǎo)入功能,本想用 csv 文件中數(shù)據(jù)直接導(dǎo)入導(dǎo)數(shù)據(jù)庫,但是微信默認(rèn)每一列都是關(guān)鍵字,不能有重復(fù)的值,而且像 12.5 和 12 這樣值都被認(rèn)為是相同的值,所以只能老老實實用微信的編輯工具手動錄入數(shù)據(jù)。記得一定要錄入 _openid!

數(shù)據(jù)庫的一條記錄

關(guān)于數(shù)據(jù)的獲取

微信提供了數(shù)據(jù)庫的異步接口

function () {
var that = this
db.collection('todos')
  .where({
    company: 'baidu'
  })
  .get({
    success: function (res) {
                ...
                }
       })
} 

關(guān)于數(shù)據(jù)的動態(tài)加載

echart 的官網(wǎng)給出的例子是靜態(tài)數(shù)據(jù)的展示,如果要展示動態(tài)數(shù)據(jù),需要使用懶加載的功能。在 onLoad 階段再從數(shù)據(jù)庫讀入數(shù)據(jù),然后初始化圖表。

getData: function () {
    var that = this
    db.collection('todos')
      .where({
        company: 'baidu'
      })
      .get({
        success: function (res) {
          // res.data 是包含以上定義的兩條記錄的數(shù)組
          var dic = {};
          var arr = [];
          var data = {};
          var re = res.data;
          for (var i = 0; i < re.length; i++) {
            dic[re[i]['season'] + '-' + re[i]['year']] = re[i]['earning']
          }
          console.log(dic);
          for (var year of ['2016', '2017']) {
            var xAxis = ['Q1', 'Q2', 'Q3', 'Q4']
            for (var i = 0; i < xAxis.length; i++) {
              var index = xAxis[i] + '-' + year
              if (index in dic) {
                if (dic[index] == null) {
                  arr.push(null)
                } else {
                  arr.push(dic[index])
                }
              }
              
            }
            data[year] = arr;
            arr = [];
          }
          console.log(data);
          that.data.line = data;
          try {
            that.init_echarts();//初始化圖表
          } catch (e) {
            console.log(e)
          }
        }
      });

  },
  //初始化圖表
  init_echarts: function () {
    this.echartsComponnet.init((canvas, width, height) => {
      // 初始化圖表
      const chart = echarts.init(canvas, null, {
        width: width,
        height: height
      });
      canvas.setChart(chart);
      chart.setOption(this.getOption());
      // 注意這里一定要返回 chart 實例,否則會影響事件處理等
      return chart;
    });
  }

最后的效果圖

效果圖

需要注意的問題

1.使用 echart 的時候需要修改app的css樣式,不然展示不出圖表。

2.關(guān)于數(shù)據(jù)的動態(tài)加載,有另一種方案,就是把讀取數(shù)據(jù)的過程放在初始化函數(shù)中執(zhí)行,然后把讀到的數(shù)據(jù)放在一個全局變量中。這種方案有一個問題,echarts 的初始化函數(shù)和全局初始化函數(shù)同時執(zhí)行,不分先后,不能實現(xiàn)讀到數(shù)據(jù)。

3.在 coding 中會遇到 TypeError:xx is not a function 的問題。這時要在函數(shù)一開時的地方使用var that = this;,然后使用that調(diào)用數(shù)據(jù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,240評論 3 119
  • 今天是周六,今天要去同學(xué)婚禮,李彪,他曾在北京,我們一起吃過飯聊過天,他說他爸媽原來也是在農(nóng)村集市買鞋,他說別人偷...
    小_小鳥閱讀 1,525評論 0 0
  • 一個青年去找禪師,說自己對于某件事情,一直都放不下去,應(yīng)該怎么辦? 禪師讓青年手里拿著杯子,然后拿著一壺開水,...
    L歲月靜好X丫閱讀 348評論 0 0
  • 上帝創(chuàng)造了人類,人類創(chuàng)造了階級。 偉大的蓋茨比,蓋茨比真得偉大嗎? 我很心疼他。 出生在底層,但是從小自命不凡,1...
    羊小艾閱讀 680評論 0 1
  • 在宇宙中每年都會有成千上萬的小行星被發(fā)現(xiàn)。雖然他們有些很小而且離地球也有一段的距離,但是偶爾會出現(xiàn)一些體積比較大而...

友情鏈接更多精彩內(nèi)容