vue组件之echarts报表
将echarts报表封装成组件,动态传入数据,显示图表。
1.饼状图
父组件:
<MPie :datas="piedata"></MPie> <!--piedata为传入的数据-->
data:function(){ return { piedata:{ htmldiv:\'mycharts2\', text: \'某站点用户访问来源\', subtext: \'纯属虚构\', name: \'访问来源\', data:[ {value:335, name:\'直接访问\'}, {value:310, name:\'邮件营销\'}, {value:234, name:\'联盟广告\'}, {value:135, name:\'视频广告\'}, {value:1548, name:\'搜索引擎\'} ] }
}
}
子组件:MPie.vue
<template> <div id="MPie"> <div :id="datas.htmldiv" style="height:100%;width:100%;min-height: 250px;"></div> </div> </template> <script> var echarts = require(\'echarts\') export default { name: \'MPie\', data () { return { } }, mounted(){ var legendData=[]; for(var i in this.datas.data){ legendData.push(this.datas.data[i]) } var option = { title : { text: this.datas.text, textStyle:{color:\'#333\'}, subtext: this.datas.subtext, subtextStyle:{color:\'#aaa\'}, x:\'center\' }, tooltip : { trigger: \'item\', formatter: "{a} <br/>{b} : {c} ({d}%)" }, legend: { orient: \'vertical\', bottom: \'bottom\', data: legendData }, series : [ { name: \'访问来源\', type: \'pie\', radius : \'55%\', center: [\'50%\', \'60%\'], data:this.datas.data, itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: \'rgba(0, 0, 0, 0.5)\' } } } ] }; var myChart = echarts.init(document.getElementById(this.datas.htmldiv)); myChart.setOption(option); window.onresize = echarts.getInstanceByDom(document.getElementById(this.datas.htmldiv)).resize(); }, methods: { }, props: { datas: {} } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> </style>
2.柱状图
父组件:
<MBar :datas="bardata"></MBar><!--piedata为传入的数据-->
bardata:{
htmldiv:\'mycharts1\',
text: \'某站点用户访问来源\',
subtext: \'纯属虚构\',
xAxisData: [\'Mon\', \'Tue\', \'Wed\', \'Thu\', \'Fri\', \'Sat\', \'Sun\'],
data:[120, 200, 150, 80, 70, 110, 130]
}
子组件:MBar.vue
<template> <div id="MBar" style=""> <div :id="datas.htmldiv" style="height:100%;width:100%;min-height: 250px;"></div> </div> </template> <script> var echarts = require(\'echarts\') export default { name: \'MBar\', data () { return { } }, mounted(){ var option = { title : { text: this.datas.text, textStyle:{color:\'#333\'}, subtext: this.datas.subtext, subtextStyle:{color:\'#aaa\'}, x:\'center\' }, xAxis: { type: \'category\', data: this.datas.xAxisData, axisLine:{ lineStyle:{ color:\'#000\', } } }, yAxis: { type: \'value\', axisLine:{ lineStyle:{ color:\'#000\', } } }, grid:{ bottom:20, left:40, right:20, top:50 }, series: [{ data: this.datas.data, type: \'bar\' }] }; var myChart = echarts.init(document.getElementById(this.datas.htmldiv)); myChart.setOption(option); window.onresize = echarts.getInstanceByDom(document.getElementById(this.datas.htmldiv)).resize(); }, methods: { }, props: { datas: {} } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> </style>