vue 中使用echarts

vue中使用echarts步骤

  1. 安装插件 npm i echarts
  2. 导入 import echarts from 'echarts’
  3. 初始化 myEcharts=echarts.init(dom选择dom需要有宽高)
  4. 写配制 options={配制}
  5. 应用配制 myEcharts.setOption(options)
  • 注意点:在数据加载完成后再使用echarts(注意数据异步问题)

echars中的数据异步问题(异步也是有队列的)

<template>
	<div class="chart">
		<el-card>
			<ul class="chart-top">
				<li class="item">
					<div class="circle">{{ info.increment_users }}</div>
					<div class="txt">今日新增用户</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_users }}</div>
					<div class="txt">总用户量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.increment_questions }}</div>
					<div class="txt">新增试题</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_questions }}</div>
					<div class="txt">总试题量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_done_questions }}</div>
					<div class="txt">总刷题量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.personal_questions }}</div>
					<div class="txt">人均刷题量</div>
				</li>
			</ul>
		</el-card>
		<el-card class="card">
			<div class="echarts" ref="echarts"></div>
		</el-card>
	</div>
</template>

<script>
import { dataTitle, dataStatistics } from '@/api/chart.js'
import echarts from 'echarts'
export default {
	data() {
		return {
			info: '',
			myechart: '',
      list: [],
      nameArr:''
		}
	},
	created() {
		dataTitle().then((res) => {
			window.console.log('chart数据:', res)
			this.info = res.data.data
    })
    // echarts数据
		dataStatistics().then((res) => {
			window.console.log('echarts:', res)
			this.list = res.data.data
			this.nameArr = this.list.map(item => {
        return item.name
      })
		})
	},
	mounted() {
    this.myechart = echarts.init(this.$refs.echarts)
    this.nameArr = this.list.map(item=>{
      return item.name
    })
		const option = {
			tooltip: {
				trigger: 'item',
				formatter: '{a} <br/>{b}: {c} ({d}%)',
			},
			legend: {
				orient: 'vertical',
				right: 10,
				data: this.nameArr,
			},
			series: [
				{
					name: '访问来源',
					type: 'pie',
					radius: ['50%', '70%'],
					avoidLabelOverlap: false,
					label: {
						show: false,
						position: 'center',
					},
					emphasis: {
						label: {
							show: true,
							fontSize: '30',
							fontWeight: 'bold',
						},
					},
					labelLine: {
						show: false,
					},
					data: this.list,
				},
			],
    }
    this.myechart.setOption(option)
    // window.console.log();
	},
}
</script>

<style lang="less">
.chart {
	.chart-top {
		display: flex;
		justify-content: space-around;
		align-items: center;
		.circle {
			width: 100px;
			height: 100px;
			border-radius: 50%;
			text-align: center;
			line-height: 100px;
			border: 2px solid green;
		}
		.txt {
			text-align: center;
		}
	}
	.echarts {
		height: 400px;
	}
	.card {
		margin-top: 20px;
	}
}
</style>

  • 以上写法是无法显示图表的,因为我们不能保证在echarts渲染之前已经获取到了数据。
  • 异步也是有队列的,渲染优先级高比ajax调用要快,相当于VIP,它是可以插队的
在数据完成之后再使用echarts就不会有问题了
<template>
	<div class="chart">
		<el-card>
			<ul class="chart-top">
				<li class="item">
					<div class="circle">{{ info.increment_users }}</div>
					<div class="txt">今日新增用户</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_users }}</div>
					<div class="txt">总用户量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.increment_questions }}</div>
					<div class="txt">新增试题</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_questions }}</div>
					<div class="txt">总试题量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.total_done_questions }}</div>
					<div class="txt">总刷题量</div>
				</li>
				<li class="item">
					<div class="circle">{{ info.personal_questions }}</div>
					<div class="txt">人均刷题量</div>
				</li>
			</ul>
		</el-card>
		<el-card class="card">
			<div class="echarts" ref="echarts"></div>
		</el-card>
	</div>
</template>

<script>
import { dataTitle, dataStatistics } from '@/api/chart.js'
import echarts from 'echarts'
export default {
	data() {
		return {
			info: '',
			myechart: '',
      list: [],
      nameArr:''
		}
	},
	created() {
		dataTitle().then((res) => {
			window.console.log('chart数据:', res)
			this.info = res.data.data
    })
    // echarts数据
		dataStatistics().then((res) => {
			window.console.log('echarts:', res)
      this.list = res.data.data
      this.nameArr= this.list.map(item=>{
        return item.name
      })
    this.myEcharts = echarts.init(this.$refs.echarts)
      const option = {
        tooltip: {
          trigger: 'item',
          formatter: '{a} <br/>{b}: {c} ({d}%)'
        },
        legend: {
          orient: 'vertical',
          right: 10,
          data: this.nameArr
        },
        series: [
          {
            name: '访问来源',
            type: 'pie',
            radius: ['50%', '70%'],
            avoidLabelOverlap: false,
            label: {
              show: false,
              position: 'center'
            },
            emphasis: {
              label: {
                show: true,
                fontSize: '30',
                fontWeight: 'bold'
              }
            },
            labelLine: {
              show: false
            },
            data: this.list
          }
        ]
      }
      this.myEcharts.setOption(option)
      window.console.log(this.nameArr)
    })
	},
	mounted() {
    
	},
}
</script>

<style lang="less">
.chart {
	.chart-top {
		display: flex;
		justify-content: space-around;
		align-items: center;
		.circle {
			width: 100px;
			height: 100px;
			border-radius: 50%;
			text-align: center;
			line-height: 100px;
			border: 2px solid green;
		}
		.txt {
			text-align: center;
		}
	}
	.echarts {
		height: 400px;
	}
	.card {
		margin-top: 20px;
	}
}
</style>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值