在Vue 中实现循环渲染多个相同echarts图表

在开发过程中我们常常需要,在一个页面中使用相同的图表来展示同级别的多个事物(如:同级别的多个不同id的仓库、同级别的多个不同id的设备等)。

上图效果实现代码:

<template>

<div class="projectCost">

<div class="container">

<div class="wrapper" v-for="(item,index) in list" :key="index">

<div class="roseChart"></div> // 使用class,不是id

</div>

</div>

</div>

</template>

<script>

export default {

data(){

return {

list:[ // 假数据

{

id:1,

price:{

name:'项目一',

resData:[

{name:'订购费用',value:12},

{name:'饲养费用',value:18},

{name:'实验费用',value:8},

{name:'其他费用',value:10},

]

}

},{

id:2,

price:{

name:'项目二',

resData:[

{name:'订购费用',value:18},

{name:'饲养费用',value:10},

{name:'实验费用',value:20},

{name:'其他费用',value:9},

]

}

}

]

}

},

methods:{

drawRose(){

var echarts = require("echarts");

var roseCharts = document.getElementsByClassName('roseChart'); // 对应地使用ByClassName

for(var i = 0;i < roseCharts.length;i++ ){ // 通过for循环,在相同class的dom内绘制元素

var myChart = echarts.init(roseCharts[i]);

myChart.setOption({

color: ["#4DFFFD", "#7B3FF6", "#1F6DFE", "#34A6FE"],

title: {

text: this.list[i].price.name,

left: '70',

top: 5,

textStyle: {

color: '#4DFFFD',

fontSize: 14,

}

},

tooltip: {

trigger: 'item',

formatter: "{b} : {c} ({d}%)"

},

legend: {

type: "scroll",

orient: "vartical",

top: "center",

right: '0px',

itemWidth: 16,

itemHeight: 8,

itemGap: 16,

textStyle: {

color: '#FFFFFF',

fontSize: 12,

},

data: ['订购费用', '饲养费用', '实验费用', '其他费用']

},

polar: {

center:['36%','56%'],

},

angleAxis: {

interval: 3, // 强制设置坐标轴分割间隔

type: 'category',

z: 10,

axisLine: {show: false},

axisLabel: {show: false},

},

radiusAxis: {

min: 10,

max: 1000,

interval: 200,

axisLine: {show: false},

axisLabel: {show: false},

splitLine: {

lineStyle: {

color: "#2277C3",

width: 1,

type: "solid"

}

}

},

calculable: true,

series: [

{

type: 'pie',

radius: ["10%", "14%"],

center:['36%','56%'],

hoverAnimation: false,

labelLine: {show: false},

data: [{

value: 0,

itemStyle: {

normal: {

color: "#809DF5"

}

}

}]

},{

stack: 'a',

type: 'pie',

radius: ['20%', '80%'],

center:['36%','56%'],

roseType: 'area',

zlevel:10,

label: {show: false},

labelLine: {show: false},

data: this.list[i].price.resData // 渲染每个图表对应的数据

}]

})

}

}

},

mounted(){

this.drawRose()

}

}

</script>

<style lang="scss" scoped>

.projectCost{

margin-left: 40px;

.container{

display: flex;

width: 680px;

height: 240px;

background-size: 100% 100%;

// background-image: url('../../../assets/images/projectTest/costDetail.png');

.wrapper{

margin-top: 20px;

width: 340px;

height:180px;

border-right: 1px solid #0B61B3;

.roseChart{

width: 260px;

height:180px;

}

}

}

}

</style>

补充知识:echarts 同时控制多个图表的属性值变更

echarts v4.x 版本如何同时控制多个图标的属性值变更

简单理解:

echarts为一个对象形式出现在代码中,通过 Canvas、SVG(4.0+)、VML 的形式渲染图表

实现方法:

echarts.init 方法初始化一个 echarts 实例并通过 setOption 方法生成一个简单的图表

需求:

将页面多个图表渲染完成后 选择更新数据或者查看固定时间段区域数据等按钮实现动态的改变echarts的图表数据表现。

分析:

1、首先对于echarts而言,每个图表都是一个单独的echarts对象,那么我们只需要将每个对象获取到并通过getOption()函数获取到每个对象的属性,并对其赋值。

2、然后通过setOption(echartsObject)方法对其执行渲染就可以了(echartsObject为每个echarts对象)。

设计思路:

1、设置一个全局数组用来装入每一个echarts对象。

var myCharts=[];

然后在每个echarts实例化完成后将当前的echarts对象放进myCharts数组中。

function darwChart(id, monitorItemData, monitorItemDecimal,oiltime) {

...

var chartid = "chart_" + id;

chartid = echarts.init(dom);

chartid.setOption(option={...})

myCharts.push(chartid);

...

}

注:这里说明id为每个表加载的时候获取的数据id,本人通过这个id来区分不同的echarts对象,如果设置多个方法互相不关联,可以不用这么写,这里自由分配,主要理解实现思想。

2、然后外部按钮触发事件的方法:循环赋值实现,这里就简单了。ok,祝你成功。

function gettimeradio(){

var rr = $('input:radio[name="r2"]:checked').attr('id');

Xmin = getDateTime(rr);

Xmax = getDateTime(0);

myCharts = Array.from(new Set(myCharts));

myCharts.forEach(data=>{

var chart = data.getOption();

chart.xAxis[0].min =Xmin ;

chart.xAxis[0].max =Xmax ;

data.setOption(chart);

})

}

以上这篇在Vue 中实现循环渲染多个相同echarts图表就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

以上是 在Vue 中实现循环渲染多个相同echarts图表 的全部内容, 来源链接: utcz.com/p/237548.html

回到顶部