l-echart
https://ext.dcloud.net.cn/plugin?id=4899
<template>
<view class="charts-box">
<l-echart ref="chart" ="init" class="charts-box"></l-echart>
</view>
</template>
<script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
import option from "@/package-pc/pages/monthreport/option";
export default {
components: {
LEchart,
},
data() {
return {
option: option,
};
},
// 使用组件的finished事件里调用
methods: {
async init() {
const chart = await this.$refs.chart.init(echarts);
chart.setOption(this.option);
},
},
};
</script>
<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
height: 600px;
}
</style>
l-echart
源码,简化组件用法(不推荐用法):1.组件中直接引入echarts.min.js
2.props
增加option
传参
3.watch
中监听option
传参
4.mounted
中直接执行init
方法初始化图表
5.init
方法中调用setOption
方法
6.加入uni.onWindowResize
方法监听宽高变化,然后调用原本就实现的resize
方法
import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
export default {
name: "lime-echart",
props: {
...
option: {
type: Object,
},
},
watch: {
option: {
handler() {
this.setOption(this.option);
},
deep: true,
},
},
mounted() {
this.$nextTick(() => {
this.$emit("finished");
this.init();
});
},
methods:{
...
async init(...args) {
// #ifndef APP-NVUE
// if (arguments && arguments.length < 1) {
// console.error(
// "缺少参数:init(echarts, theme?:string, opts?: object, callback?: function)"
// );
// return;
// }
// #endif
...
this.chart = echarts.init(
config.canvas,
theme,
Object.assign({}, config, opts)
);
this.chart.setOption(this.option ?? {});
uni.onWindowResize(() => {
this.resize();
});
...
},
}
直接传参option给组件,请求接口后修改option即可
<template>
<view class="charts-box">
<l-echart :option="option1" class="charts-box"></l-echart>
</view>
</template>
<script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import option from "@/package-pc/pages/monthreport/option";
export default {
components: {
LEchart,
},
data() {
return {
option: option,
};
},
// 修改option即可
methods: {
async setText() {
this.option.title.text = "test"
},
},
};
</script>
<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
height: 600px;
}
</style>
l-echart
源码,简化组件用法(推荐用法):做的工作其实就是把echarts放在组件里面使用了,页面中就不用导入了,同时组件内部做了init初始化图表,页面中setOption就行了
import * as echarts from "@/package-pc/pages/components/lime-echart/static/echarts.min.js";
export default {
name: "lime-echart",
mounted() {
this.$nextTick(async () => {
await this.init();
this.$emit("finished");
});
},
methods:{
...
async init(...args) {
// #ifndef APP-NVUE
// if (arguments && arguments.length < 1) {
// console.error(
// "缺少参数:init(echarts, theme?:string, opts?: object, callback?: function)"
// );
// return;
// }
// #endif
...
this.chart = echarts.init(
config.canvas,
theme,
Object.assign({}, config, opts)
);
uni.onWindowResize(() => {
this.resize();
});
...
},
}
<template>
<view class="charts-box">
<l-echart
ref="chart"
:option="option"
="init"
class="charts-box"></l-echart>
</view>
</template>
<script>
import LEchart from "@/package-pc/pages/components/lime-echart/components/l-echart/l-echart.vue";
import option from "@/package-pc/pages/monthreport/option";
export default {
components: {
LEchart,
},
data() {
return {
option: option,
};
},
// finished回调中设置option,接口请求图表数据也放在这里
methods: {
init() {
this.$refs.chart.setOption(this.option);
},
},
};
</script>
<style scoped>
/* 请根据实际需求修改父元素尺寸,组件自动识别宽高 */
.charts-box {
width: 100%;
height: 600px;
}
</style>