echarts uniapp 没有dom renderjs 解决uniapp无法获取Dom

4 篇文章 0 订阅

在uni-app的app和h5端,引入完整的echarts,并且提供高性能的动画。

注意事项

仅支持 app-vue、h5 端
要求 uni-app 2.5.5+以上版本
app端要求使用v3编译器

过去的问题

H5端流行的echart报表因为涉及大量dom操作,无法跨端使用
wx-chart在跨端和更新方面都不足
插件市场提供了比wx-chart更好的、全端可用的uChart。但受限于小程序架构逻辑层和视图层分离,导致的通信折损,图表的动画性能不佳。并且uchart只实现了echart的常用功能,还有一些功能没有实现。

新的解决方案

从uni-app 2.5.5+起,新提供了renderjs技术。它是wxs的升级版,一种可以运行在视图层的js。

通过renderjs编写的代码,直接运行在视图层(也就是webview中),可以完整的运行echart等库,并且没有了逻辑层和视图层频繁通行的折损,让动画不再卡顿。

renderjs支持app-vue和h5,不支持其他平台。如果你只考虑这2个平台,可以直接使用本示例,使用完整版的echart。如果还要兼容多端小程序,建议仍然使用uchart。

renderjs,不止能运行echart,其他如F2、threejs等web库都可以运行。

使用

<!-- 放置echarts的容器 -->
<!-- echarts模块名.事件名 -->
<view @click="echarts.onClick" :prop="option"  id="echarts" ></view>

//正常写法
<script>
//正常写法
export default {
	data() {
		return {
			option: {
				title: {
					text: 'ECharts 入门示例'
				},
				tooltip: {},
				legend: {
					data: ['销量']
				},
				xAxis: {
					data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
				},
					yAxis: {},
					series: [{
					name: '销量',
					type: 'bar',
					data: [5, 20, 36, 10, 10, 20]
				}]
			}
		}
	},
	onLoad() {},
	methods: {
		onViewClick(options) {
			console.log(options)
		}
	}
}
</script>
//将获取dom的操作写在下面这个里面
//类似vue 的 混入 mixin 
<script module="echarts" lang="renderjs">
export default {
	mounted() {
		// 动态引入较大类库避免影响页面展示
		const script = document.createElement('script')
		script.src = 'static/echarts.js'
		//更改作用域
		script.onload = this.initEcharts.bind(this)
		document.head.appendChild(script)
	},
	methods: {
		initEcharts() {
			myChart = echarts.init(document.getElementById('echarts'))
			// 可以直接拿到正常写法里的数据
			myChart.setOption(this.option)
		},
		updateEcharts(newValue, oldValue, ownerInstance, instance) {
			// 监听 service 层数据变更
			myChart.setOption(newValue)
		},
		onClick(event, ownerInstance) {
			// 调用 script里正常写法的methods
			// ownerInstance.callMethod(方法名,传值) 
			ownerInstance.callMethod('onViewClick', {
				test: 'test'
			})
		}
	}
}
</script>
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑕、疵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值