文章目录
- 解决方案
- 代码示例
解决方案
render.js
- renderjs是运行在视图层的js,在视图层操作dom,运行for web的js库。
- 基本使用
- 设置 script 节点的 lang 为 renderjs,并为该节点设置module值进行命名
复制<script module="demo" lang="renderjs"> export default { methods: { chartDataHandler (value) { // value是监听的chartData数据 }, emitData (e, ownerInstance) { // 调用ownerInstance.callMethod,向逻辑层发送数据 // 逻辑层触发receiveRenderData函数接收 ownerInstance.callMethod('receiveRenderData', { data: 'fromRender' }) } } } </script> - renderjs层与service层通信:
- service -> renderjs:在页面中监听指定数据,在其变化时自动触发renderjs的方法
- renderjs -> service:调用ownerInstance.callMethod,触发service层对应处理函数
复制<template> <!-- 监听chartData数据,该数据来源于逻辑层;toRender可以随便命名,但要和:change:[dataName]中dataName保持一致 :change: 当chartData发生变化时,调用renderjs中定义的chartDataHandler方法,demo和module中的命名对应 --> <view :toRender="chartData" :change:toRender="demo.chartDataHandler"></view> <!-- 向逻辑层发送数据 --> <view @click="demo.emitData"></view> </template> <!-- 逻辑层 --> <script> export default { data () { return { chartData: {} }, methods: { receiveRenderData (val) { // 接收render层发来的数据 } } } } </script> - renderjs层与service层通信:
- 设置 script 节点的 lang 为 renderjs,并为该节点设置module值进行命名
代码示例
<template> <view id="chart-box" :toRender="chartData" :change:toRender="emptyRender.initChart" > </view> </template> <script> export default { data () { return { chartData: {} } }, mounted () { // 获取图标渲染所需的数据 this.getDetail() }, methods: { async getDetail() { try { const res = await $http_get(url, params) this.chartData = res.data } catch (e) { $handle_err(e) } } } } </script> <script module="emptyRender" lang="renderjs"> import * as echarts from 'echarts'; export default { methods: { initChart(value) { // value: 监听的chartDate数据,来自service层 const dom = document.getElementById('chartWrapper') if (!dom) { return } echarts.dispose(dom); //销毁echarts实例 const chart = echarts.init(dom); chart.setOption({ xAxis: { type: 'category', data: value.xAxis, }, yAxis: { type: 'value' }, series: [{ data: value.yAxis, type: 'line' }] }) } } } </script> <style> #chart-box{ width: 800rpx; height: 600rpx; } </style>
复制