因为一个项目需要用到echarts5这个js库来绘制折线和柱状图。vue有vue-echarts这个插件来方便引入echart。但是本着学习的目的,所以就没有用插件,而是直接引入echarts5.js。但是没想到坑确实多,所以就来记录一下。

先说一下我的版本,我是echarts5版本,所以echarts4及其以下就不需要看了,因为echarts5的接口已经改变,所以如果大家需要参考,最好看一下版本,以免出错。
直接npm下载,当然我们国内因为某种原因可能比较慢,所以要么有科学上网的能力,要么就是用淘宝的cnpm镜像。
全局引入就非常简单,直接在main.js里直接
//用import引入echarts
import echarts from 'echarts'
//绑定在vue的原型链上
Vue.prototype.$echarts = echarts; 
项目代码结构
可以看到我的echarts的引入是在外面单独写一个js文件,然后引入进main.js中
// echart.js
// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from 'echarts/core';
import Vue from 'vue'
// 引入柱状图,折线图图表,散点图图表后缀都为 Chart
import { BarChart,LineChart,ScatterChart} from 'echarts/charts';
// 引入提示框,标题,直角坐标系,数据集,内置数据转换器组件,组件后缀都为 Component
import {
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
DatasetComponentOption,
TransformComponent
} from 'echarts/components';
// 标签自动布局,全局过渡动画等特性
import { LabelLayout, UniversalTransition } from 'echarts/features';
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import { CanvasRenderer } from 'echarts/renderers';
// 注册必须的组件
echarts.use([
TitleComponent,
TooltipComponent,
GridComponent,
DatasetComponent,
TransformComponent,
BarChart,
LineChart,
ScatterChart,
LabelLayout,
UniversalTransition,
CanvasRenderer
]);
//绑定在原型链上
Vue.prototype.$echarts = echarts
//导出echarts
export default echarts 官方引入教程。
https://echarts.apache.org/handbook/zh/basics/import
//main.js中引入echart.js
import echarts from "./Echarts/echarts.js" 组件中引用
<template>
<div ref="Dom" style="width: 300px; height: 400px;">
</div>
</template>
<script>
export default{
mounted() {
//获取Dom节点
let chartDom = this.$refs.Dom;
//初始化echarts实例
let myChart = this.$echarts.init(chartDom);
//绘制图标
let option;
option = {
xAxis: {
type: 'category',
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
},
yAxis: {
type: 'value'
},
series: [
{
data: [150, 230, 224, 218, 135, 147, 260],
type: 'line'
}
]
};
option && myChart.setOption(option);
}
}
</script>
<style>
</style>
var myChart = echarts.init(document.getElementById('main'));
myChart.setOption({
// ...
}); 注意呀,官方的实例是利用id或者class名来引用的,而我是利用vue里的ref,要注意两者的区别。

vue官方对ref的说明

最终效果
注意,用来显示echarts的容器最好height和width最好设置为死的,不要设置为100%。
<template>
<div ref="Dom" style="width: 300px; height: 400px;">
</div>
</template> 发现echart并没有按照百分比适应屏幕,其原因echart是执行太快,css的100%还没来得及反应,js就已经执行完了,所以把百分比转成像素单位,其解决方法是延迟echart的初始化