uniapp使用Echarts图表H5显示正常 打包app显示异常

uniapp使用Echarts在H5页面调试 调试完在H5正常显示 然后通过安卓机调试的时候 发现直接空白了 还有这个爆错 Initialize failed: invalid dom 我有多个图表、图表是通过v-for循环出来的

解决方案

原来是yarn直接安装Echarts 然后改成本地JS文件引入
gitbub文件地址 — dist/echarts.js文件 只用到这一个js文件
在这里插入图片描述

这是一个图表

<template>
	<view class="content">
		<view :prop="option" :change:prop="echarts.updateEcharts" id="echarts" class="echarts"></view>
	</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				option: {
					xAxis: {
						type: 'category',
						data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
					},
					yAxis: {
						show: false,
						type: 'value'
					},
					series: [{
						data: [
							120,
							{
								value: 200,
								itemStyle: {
									color: '#a90000'
								}
							},
							150,
							{
								value: 20,
								itemStyle: {
									color: '#00aa00'
								}
							},
							70,
							110,
							130
						],
						type: 'bar'
					}],

					grid: {
						top: '40rpx',
						left: '0rpx',
						bottom: '40rpx',
						bottom: '40rpx',
					},

				},
			}
		}
	}
</script>

<script module="echarts" lang="renderjs">
	let myChart
	export default {
		mounted() {
			if (typeof window.echarts === 'function') {
				this.initEcharts()
			} else {
				const script = document.createElement('script')
				script.src = 'static/echarts.js'
				script.onload = this.initEcharts.bind(this)
				document.head.appendChild(script)
			}

		},
		methods: {
			initEcharts() {
				setTimeout(() => {
					myChart = echarts.init(document.getElementById('echarts'))
					myChart.setOption(this.option)
				})
				window.addEventListener('resize', () => {
					myChart.resize()
				});

			},
			updateEcharts(newValue, oldValue, ownerInstance, instance) {
				// 监听 service 层数据变更
				if (myChart) {
					myChart.setOption(newValue)
					window.addEventListener('resize', () => {
						myChart.resize()
					});
				}
			},
			onClick(event, ownerInstance) {
				// 调用 service 层的方法
				ownerInstance.callMethod('onViewClick', {
					test: 'test'
				})
			}
		}
	}
</script>

<style>
	.echarts {
		width: 100%;
		height: 434rpx;
	}
</style>

效果图 正常展示

在这里插入图片描述

注意

因为我是循环图表 然后发现 :prop=“item.option” 这样不能使用 通过下标三元表达式也不行 数据只能暴露在最外层

然后找了个笨方法 图表有三个 然后每一个盒子里都写三个图表 搭配v-show进行区分
在js里手动渲染 循环也不行 当然记得设置宽高

循环体内一段是这样
html

						<view v-show="index==0" :prop="option1" :change:prop="echarts.updateEcharts" id="main1"
							class="main1" style="width: 200rpx;height:100rpx"></view>

						<view v-show="index==1" :prop="option2" :change:prop="echarts.updateEcharts" id="main2"
							class="main2" style="width: 200rpx;height:100rpx"></view>

js 渲染部分

 					myChart1 = echarts.init(document.getElementById('main1'))
					myChart1.setOption(this.option1)

					myChart2 = echarts.init(document.getElementsByClassName('main2')[1])
					myChart2.setOption(this.option2)

					myChart3 = echarts.init(document.getElementsByClassName('main3')[2])
					myChart3.setOption(this.option3)

之后H5、App都正常显示了

测试数据
在这里插入图片描述

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值