uniapp微信小程序中使用echarts

1、下载所需要的库
终端输入 npm install echarts mpvue-echarts --save
将node_modules中的mpvue-echarts文件夹放入components目录下,只保留其中的src文件夹


image.png

2、然后在https://echarts.apache.org/zh/builder.html定制echarts的js文件,然后下载,放到common目录下

image.png

3、以折线图为例

<template>
    <view>
        <view class="wrap">
            <mpvue-echarts :onInit="initChart" />
        </view>
        <view @click="drawAgain">重新绘制</view>
        <view @click="drawAgain1">重新绘制2</view>
    </view>
</template>

<script>
import * as echarts from '@/common/echarts.min'; /*chart.min.js为在线定制*/
import mpvueEcharts from '@/components/mpvue-echarts/src/echarts.vue';
let chart = null;
export default {
    data() {
        return {
            option: {
                backgroundColor: '#fff',
                color: ['#ec562e'],
                 tooltip: {
                    trigger: 'axis'
                  },
                xAxis: {
                    type: 'category',
                    data: ['周一', '周二', '周三']
                },
                yAxis: {
                    x: 'center',
                    type: 'value',
                    splitLine: {
                        lineStyle: {
                            color:'#999999',
                            type: 'dashed'
                        }
                    }
                },
                series: [
                    {
                        name: '价格',
                        type: 'line',
                        smooth: true,
                        data: [70,50,60],
                    }
                ]
            }
        };
    },
    methods: {
        initChart(canvas, width, height) {
            chart = echarts.init(canvas, null, {
                width: width,
                height: height
            });
            canvas.setChart(chart);
            return chart;
        },
        drawAgain() {
            this.$set(this.option.xAxis, 'data', ['周一', '周二', '周三']);
            this.$set(this.option.series[0], 'data', [78, 40, 33]);
            chart.setOption(this.option);
        },
        drawAgain1() {
            this.$set(this.option.xAxis, 'data', ['周一', '周二', '周三', '周4']);
            this.$set(this.option.series[0], 'data', [78, 40, 33, 50]);
            chart.setOption(this.option);
        }
    },
    components: {
        mpvueEcharts
    }
};
</script>

<style>
.wrap {
    width: 100%;
    height: 300px;
}
</style>

运行时提示this.echarts.setCanvasCreator is not a function的错误
解决方法:
1、找到components--》mpvue-echarts--》src--》echarts.vue
导入import * as echarts from '@/common/echarts.min'; /echarts.min.js为在线定制/
2、注释props中的echarts,如下

export default {
  props: {
    // echarts: {
    //   required: true,
    //   type: Object,
    //   default() {
    //     return null;
    //   },
    // },
    onInit: {
      type: Function,
      default: null,
    },
    canvasId: {
      type: String,
      default: 'ec-canvas',
    },
    lazyLoad: {
      type: Boolean,
      default: false,
    },
    disableTouch: {
      type: Boolean,
      default: false,
    },
    throttleTouch: {
      type: Boolean,
      default: false,
    },
  },

3、在 onReady方法中添加 this.echarts = echarts

 onReady() {
      this.echarts = echarts  //新增
    if (!this.echarts) {
      console.warn('组件需绑定 echarts 变量,例:<ec-canvas id="mychart-dom-bar" '
        + 'canvas-id="mychart-bar" :echarts="echarts"></ec-canvas>');
      return;
    }

    if (!this.lazyLoad) this.init();
  },

4、init方法中修改以下3处
const canvasId = this.canvasId; //------修改------
this.ctx = wx.createCanvasContext(canvasId,this);//------修改------
const query = wx.createSelectorQuery().in(this); //------修改------

init(callback) {
      const version = wx.version.version.split('.').map(n => parseInt(n, 10));
      const isValid = version[0] > 1 || (version[0] === 1 && version[1] > 9)
        || (version[0] === 1 && version[1] === 9 && version[2] >= 91);
      if (!isValid) {
        console.error('微信基础库版本过低,需大于等于 1.9.91。'
          + '参见:https://github.com/ecomfe/echarts-for-weixin'
          + '#%E5%BE%AE%E4%BF%A1%E7%89%88%E6%9C%AC%E8%A6%81%E6%B1%82');
        return;
      }

      const canvasId = this.canvasId;  //------***修改***------
      this.ctx = wx.createCanvasContext(canvasId,this);//------***修改***------

      const canvas = new WxCanvas(this.ctx, canvasId);

      this.echarts.setCanvasCreator(() => canvas);

      const query = wx.createSelectorQuery().in(this);  //------***修改***------
      query.select(`#${canvasId}`).boundingClientRect((res) => {
        if (!res) {
          setTimeout(() => this.init(), 50);
          return;
        }

        const { width, height } = res;

        if (typeof callback === 'function') {
          this.chart = callback(canvas, width, height);
        } else if (typeof this.onInit === 'function') {
          this.chart = this.onInit(canvas, width, height);
        }

        if (!this.chart) {
          return;
        }

        const { handler } = this.chart.getZr();

        this.handler = handler;
        this.processGesture = handler.proxy.processGesture || (() => {});
      }).exec();
    },

参考文章:
uniapp在微信小程序中使用 ECharts
https://blog.csdn.net/wxh958548129/article/details/107520566
uni-app使用mpvue-echarts报 的解决办法
https://ask.dcloud.net.cn/article/36652

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345