微信小程序使用echarts(ec-canvas)获取接口数据后,手机端页面视图未更新bug

我这里一个页面用了两个echarts,第一个是折线图与柱状图结合,第二个是横向柱状图;

我在js代码中的重要部分加了注释;wxml代码很简单,放在最后;

javascript 复制代码
import * as echarts from '../../components/ec-canvas/echarts';
import { getINCOMETJList } from "../../api/statistics/index";

// 接口拿到数据,页面没更新,需要把chart定义和option定义放到page的外边,代码的前边;
let chart = null 
let chart2 = null 
const option = {
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'cross',
      crossStyle: {
        color: '#999'
      }
    }
  },
  toolbox: {
    show: false,
    feature: {
      dataView: { show: true, readOnly: false },
      magicType: { show: true, type: ['line', 'bar'] },
      restore: { show: true },
      saveAsImage: { show: true }
    }
  },
  legend: {
    data: ['就诊人次', '就诊金额']
  },
  xAxis: [
    {
      type: 'category',
      data: [], // 在需要接口数据的值这里初始给一个空数组,然后获取接口数据后,重新赋值;
      axisPointer: {
        type: 'shadow'
      }
    }
  ],
  yAxis: [
    {
      type: 'value',
      name: '(人)',
      axisLabel: {
        formatter: '{value} 人',
      }
    },
    {
      type: 'value',
      name: '(元)',
      axisLabel: {
        formatter: '{value} 元'
      }
    }
  ],
  series: [
    {
      name: '就诊人次',
      type: 'bar',
      tooltip: {
        valueFormatter: function (value) {
          return value + ' 人';
        }
      },
      data: [] // 在需要接口数据的值这里初始给一个空数组,然后获取接口数据后,重新赋值;
    },
    {
      name: '就诊金额',
      type: 'line',
      yAxisIndex: 1,
      smooth: true,
      tooltip: {
        valueFormatter: function (value) {
          return value + ' 元';
        }
      },
      data: [] // 在需要接口数据的值这里初始给一个空数组,然后获取接口数据后,重新赋值;
    }
  ]
};

const option2 = {
  title: {
    text: ''
  },
  tooltip: {
    trigger: 'axis',
    axisPointer: {
      type: 'shadow'
    }
  },
  legend: {},
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  xAxis: {
    type: 'value',
    boundaryGap: [0, 0.01]
  },
  yAxis: {
    type: 'category',
    data: [1, 2, 3, 4, 5]
  },
  series: [
    {
      name: '药品',
      type: 'bar',
      data: [] // 在需要接口数据的值这里初始给一个空数组,然后获取接口数据后,重新赋值;
    }
  ]
};

// echart需要初始化,不用赋值;
function initChart(canvas, width, height, dpr) {
  chart = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr
  });
  return chart;
}

function initChart2(canvas, width, height, dpr) {
  chart2 = echarts.init(canvas, null, {
    width: width,
    height: height,
    devicePixelRatio: dpr
  });
  return chart2;
}

Page({
  data: {
    ec: {
      onInit: initChart
    },
    ec2: {
      onInit: initChart2
    }
  },
  onLoad: function () {
    this.updateData();
  },
  updateData: function() {
   	// 使用接口拿到echarts所需数据
    getINCOMETJList({ ParameterData: ParameterData }).then((res) => {
      console.log(res)
      if(res.Code == 200) {
        const data = res.Data.ReplyData;
        this.setData({,
          Month: data.OPMONTHTJDATA.map(item => item.Month),
          MONTHVISITNUM: data.OPMONTHTJDATA.map(item => item.MONTHVISITNUM),
          MONTHAMT: data.OPMONTHTJDATA.map(item => item.MONTHAMT),
          CHARGEAMT: data.OPMEDICINETOPDATA.map(item => item.CHARGEAMT),
        })
		// 重新赋值,option中初始定义了空数组,在这里给数组赋值;
        option.xAxis.data = this.data.Month
        option.series[0].data = this.data.MONTHVISITNUM
        option.series[1].data = this.data.MONTHAMT
        option2.series[0].data = this.data.CHARGEAMT
		// 给chart图表添加接口返回的数据
        setTimeout(() => {
          chart.clear()
          chart2.clear()
          chart.setOption(option);
          chart2.setOption(option2);
        }, 500);
      }
    })
  }
});
xml 复制代码
<view class="card">
   <view class="card-content">
     <ec-canvas ec="{{ ec }}" force-use-old-canvas="true"></ec-canvas>
   </view>
 </view>

 <view class="card">
   <view class="card-content">
     <ec-canvas ec="{{ ec2 }}" force-use-old-canvas="true"></ec-canvas>
   </view>
 </view>
相关推荐
云起SAAS1 天前
供求求购供应发布VIP会员抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·供求求购供应发布
_OP_CHEN1 天前
【测试理论与实践】(四)测试用例篇(上):从概念到万能思路,解锁测试设计核心密码
运维·测试开发·测试用例·bug·压力测试·测试·网络测试
毕设源码-朱学姐1 天前
【开题答辩全过程】以 基于微信小程序旅游疫情防控管理系统为例,包含答辩的问题和答案
微信小程序·小程序·旅游
一点晖光1 天前
ios底部按钮被挡住
前端·ios·微信小程序
前端程序猿之路1 天前
基于扣子(Coze)工作流 API 的微信小程序开发实践总结
前端·微信小程序·小程序·大模型·api·ai编程·扣子
德育处主任2 天前
在小程序做海报的话,Painter就很给力
前端·微信小程序·canvas
万粉变现经纪人2 天前
如何解决 pip install SSL 报错 ValueError: check_hostname requires server_hostname 问题
网络·python·网络协议·beautifulsoup·bug·ssl·pip
丸子哥哥2 天前
vue + uni-app:利用原生uni.chooseImage封装拍照功能的组件
微信小程序·uni-app·vue
万粉变现经纪人2 天前
如何解决 pip install 代理报错 SOCKS5 握手失败 ReadTimeoutError 问题
java·python·pycharm·beautifulsoup·bug·pandas·pip