使用eacharts做大屏,定制小程序开发费用需要使用后端数据,定制小程序开发费用下面的方法是自己试过有效的,定制小程序开发费用有什么不对的,望各位大佬指点。
目录
方法一:在mounted中使用定时器调用eacharts方法(定时器可以获取到data中的数据)
- mounted () {
- setTimeout(() => {
- this.axisOption() // 树状
- this.pieOption()//饼图
- }, 2000)
- },
- //或者
- mounted () {
- setTimeout(async () => {
- const res = await Getwx()
- this.Monthlist = res.Data.Monthlist
- this.Visitpvlist = res.Data.Visitpvlist
- this.drawLine();//柱状图
- }, 0);
- },
方法二:在调用数据的时候调用图表(一个页面的所有数据都在这一个接口中)
- created () {
- this.GetProjectAll ()
- },
-
- methods: {
- // 获取数据
- async GetProjectAll () {
- const res = await GetProjectAll({ projectid: this.formdata.type })
- this.tableData = res.data.jrgrsl.data
- this.pieData = res.data.clbp.data
- this.$nextTick(() => {
- this.axisOption() // 树状
- this.pieOption()//饼图
- })
- },
- }
方法三:使用chartes中的
- <script>
- import * as echarts from 'echarts'
- import { getStatistics } from '@/api/home'
- export default {
- data () {
- return {
- mainData: [],//折线图数据
- }
- },
- mounted () {
- this.chartSetting();
- },
- created () {
- this.CeData()
- },
- methods: {
- // 返回数据
- async CeData () {
- const { data } = await getStatistics()
- this.mainData = data.mainData
- },
- // 折现图
- chartSetting () {
- // 基于准备好的dom,初始化echarts实例
- this.mainChart = echarts.init(document.getElementById('main'))
- const option = {
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'cross',
- label: {
- backgroundColor: '#6a7985'
- }
- }
- },
- dataset: [ // 数据
- { source: this.mainData // 表数据 },
- { transform: {
- type: 'sort'
- }
- }
- ],
- xAxis: [
- {
- type: 'category',
- boundaryGap: false,
- axisLabel: { // 底部文字设置
- interval: 0, // 控制是否全部显示
- fontSize: 12
- },
- axisLine: { // 底部横线
- show: false
- },
- axisTick: { // 刻度线
- show: false
- }
- }
- ],
- yAxis: [
- { type: 'value' }
- ],
- series: [
- {
- name: '项目',
- type: 'line',
- stack: 'Total',
- smooth: true,
- lineStyle: { width: 1, color: '#2e3192' },
- showSymbol: false,
- label: { show: true, position: 'top' },
- areaStyle: {
- opacity: 0.8,
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- { offset: 0, color: '#62a0f8' },
- { offset: 1, color: '#b5d5ff' }
- ])
- },
- markPoint: { // 最大值和最小值标注
- data: [
- { type: 'max', name: '最大值' }
- ]
- },
- emphasis: { focus: 'series' }
- }
- ]
- }
- // 绘制图表
- this.mainChart.setOption(option)
- const that = this
- window.addEventListener('resize', function () {
- that.mainChart.resize()
- })
- },
- }
- }
- </script>
方法四:在对应图表中,用ajax请求
- drawLine2 () {
- var chartDom = document.getElementById('main2');
- var myChart = echarts.init(chartDom);
- var option;
-
- option = {
- tooltip: {
- trigger: 'axis',
- axisPointer: {
- type: 'cross',
- crossStyle: {
- color: '#999'
- }
- }
- },
- grid: {
- left: "11%",
- width: "80%",
- height: "60%"
- },
- legend: [{
- data: ['单位: 秒'],
- top: "10",
- left: "10",
- itemWidth: 8,
- itemHeight: 8,
- icon: "rect",
- textStyle: {
- color: "#fff"
- }
- }, {
- data: ['增速%'],
- top: "10",
- right: "5%",
- itemWidth: 8,
- itemHeight: 8,
- icon: "rect",
- textStyle: {
- color: "#fff"
- }
- }],
- xAxis: [
- {
- type: 'category',
- data: [],
- axisPointer: {
- type: 'shadow'
- },
- axisTick: {
- show: false
- },
- axisLabel: {
- interval: 0,
- textStyle: {
- color: '#b8b8ba',
- },
- }
- }
- ],
- yAxis: [
- {
- type: 'value',
- min: 0,
- max: 10000,
- interval: 2000,
- axisLabel: {
- formatter: function (value) {
- return value + ""
- },
- textStyle: {
- color: '#b8b8ba',
- },
- },
- axisLine: {
- show: true
- },
- axisTick: {
- show: false
- },
- splitLine: {
- show: true,
- lineStyle: {
- width: 0.5
- }
- },
- symbol: "triangle"
- },
- {
- type: 'value',
- min: 0.4,
- max: 0.9,
- interval: 0.1,
- axisLabel: {
- formatter: '{value}',
- textStyle: {
- color: '#b8b8ba',
- },
- },
- splitLine: {
- show: true,
- lineStyle: {
- width: 0.5
- }
- },
- }
- ],
- series: [
- {
- name: '单位: 秒',
- type: 'bar',
- data: [],
- itemStyle: {
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- { offset: 0, color: '#01c7f4' },
- { offset: 1, color: '#003fe2' }
- ]),
- borderRadius: 8
- },
- barWidth: 10
- },
- {
- name: '增速%',
- type: 'line',
- areaStyle: {},
- yAxisIndex: 1,
- data: [],
- itemStyle: {
- color: "#77ff3b",
- },
- lineStyle: {
- width: 1
- },
- symbolSize: 7,
- areaStyle: {
- opacity: 0.4,
- color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
- { offset: 1, color: '#040d0c' },
- { offset: 0, color: '#5cd62c' }
- ])
- },
- }
- ]
- };
- const zoomSize = 6;
- myChart.on('click', function (params) {
- console.log(dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
- myChart.dispatchAction({
- type: 'dataZoom',
- startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
- endValue:
- dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
- });
- });
- option && myChart.setOption(option);
- $.ajax({
- type: "get",
- // async: false, //同步执行
- url: "api/WxStatistics/GetStatisticsData",
- data: {},
- success: function (result) {
- myChart.setOption({
- xAxis: { data: result.Data.Monthlist },
- series: [
- {
- data: result.Data.Staytimeuvlist,
- },
- {
- data: [0.6, 0.65, 0.65, 0.68, 0.58, 0.61, 0.58, 0.6, 0.61, 0.65, 0.63, 0.55],
- }
- ]
- })
- },
- error: function (errorMsg) {
- alert("不好意思,图表请求数据失败啦!");
- myChart.hideLoading();
- }
- })
- window.addEventListener("resize", function () {
- myChart.resize();
- });
- },
注意
如果一个图表需要展示不同数据时,每获取一次数据,图表都会重新渲染一次(例如下拉框中选取数据后,图表切换对应数据)。
可能会出现There is a chart instance already initialized on the dom.这样的警告,意思是dom上已经初始化了一个图表实例。
解决办法:可以在每次渲染前先销毁这个实例,然后再重新渲染。
- var myChart //先注册全局变量
-
- axisOption () {
- //在方法内判断,然后销毁实例,然后再初始化
- if (myChart != null && myChart != "" && myChart != undefined) {
- myChart.dispose();//销毁
- }
- // 基于准备好的dom,初始化echarts实例
- myChart = echarts.init(document.getElementById('axisMain'))
- const option = { }
- // 绘制图表
- myChart.setOption(option)
- window.addEventListener('resize', function () {
- myChart.resize()
- })
- },
到这里就结束啦,这篇文章看完如果您觉得有所收获,认为还行的话,就点个赞收藏一下