当前位置:   article > 正文

uniapp 中使用echarts,app端特别注意_uniapp echarts 移动端

uniapp echarts 移动端

废话不多说;干就完了。

首先是,uniapp中使用echarts本身没啥问题;安装引用,安装官方步骤来就完了。

可是,如果到时候要打包成app,那就对不起了。因为我也不清楚的某种原因,

uniapp把图表地图之类的东西,在app的时候的写法发生了改变。主要是多了一个视图层的概念。

下面开干。

1.模板部分,不多说废话。

  1. <!-- 注意 echarts根标签上面的自定义属性 :list & :change:lists="echartsModule.updateOpts" -->
  2. <!-- 这两个东西是做视图层和逻辑层通信用的,下面会说。 -->
  3. <template>
  4. <view>
  5. <!-- 注意标签上的属性;为了逻辑层与视图层进行通信的;没有就通信不了 -->
  6. <view class="myEcharts" id="myEcharts" :lists="lists" :change:lists="echartsModule.updateOpts">
  7. </view>
  8. </view>
  9. </template>

2.逻辑层,啥意思呢,就是平时写vue的时候script标签里面的内容,在这里称之为逻辑层

  1. <script>
  2. export default {
  3. props: {
  4. reportData: {
  5. type: Object,
  6. required: () => {}
  7. },
  8. },
  9. computed:{
  10. // 小技巧;想监听一个对象的部分属性的实现,利用计算属性结构出要监听的部分
  11. lists(){
  12. const {upList,downList} = this.reportData && this.reportData.extend2
  13. return {upList,downList}
  14. }
  15. },
  16. methods:{
  17. // 逻辑层声明的方法,下面会被视图层进行调用的;也可以理解为一个回调函数
  18. // 需要视图层传参数到逻辑层的时候用的
  19. updateUrl(val){
  20. this.reportData.extend2.imgUrl = val
  21. }
  22. }
  23. }
  24. </script>

3.视图层;这玩意很特别,是uniapp为了加速视图渲染搞出来的。个人觉得难用,不成熟。

script标签里面关键字 renderjs  代表渲染层 也叫视图层,跟逻辑层完全隔离

  1. <script module="echartsModule" lang="renderjs">
  2. import * as echarts from 'echarts'
  3. export default {
  4. data() {
  5. return {
  6. myChart: '',
  7. }
  8. },
  9. mounted(options) {
  10. if (typeof window.echarts === 'object') {
  11. this.drawLines()
  12. } else {
  13. // 动态引入类库
  14. const script = document.createElement('script')
  15. script.onload = this.drawLines()
  16. document.head.appendChild(script)
  17. }
  18. },
  19. methods: {
  20. drawLines() {
  21. // 这里是初始化的方式,通过id查询找到你的canvas标签
  22. this.myChart = echarts.init(document.getElementById('myEcharts'))
  23. this.setOption()
  24. this.myChart.resize()
  25. },
  26. // 这个方法是标签上面传递的属性lists发生变化的时候触发的方法
  27. // 实现逻辑层跟视图层通信的
  28. updateOpts(newVal, oldVal, ownerVm, vm){
  29. this.setOption(newVal.upList,newVal.downList)
  30. },
  31. setOption(upList = [], downList = []) {
  32. const option = {
  33. grid: {
  34. left: '8%',
  35. right: '20%',
  36. bottom: '3%',
  37. containLabel: true,
  38. },
  39. xAxis: {
  40. type: 'category',
  41. name: '载荷(kg)',
  42. data: ['30%', '40%', '50%', '60%'],
  43. },
  44. yAxis: {
  45. type: 'value',
  46. name: '电流(A)',
  47. },
  48. series: [{
  49. type: 'line',
  50. data: upList,
  51. },
  52. {
  53. type: 'line',
  54. data: downList,
  55. },
  56. ],
  57. }
  58. if (this.myChart) {
  59. this.myChart.setOption(option)
  60. //下面这行代码就是视图层调用逻辑层的方法,并且传参数到逻辑层
  61. this.$ownerInstance.callMethod('updateUrl',this.myChart.getDataURL("jpg"))
  62. }
  63. }
  64. },
  65. }
  66. </script>

总结

1.比较麻烦的就是逻辑层和视图层之间的通信,其他的稍微理解一下就行

2.模板中调用视图层的方法需要加上script标签上的module属性值;要不然调不通

3.特别注意;这东西如果要做app需要在真机或者模拟器上面调试;如果用H5根本发现不了问题

4.关于逻辑层和视图层之间的通信,我试过很多方法(订阅发布、父组件转发、vuex),都没有用。只能用这种比较烂的方法;头皮发麻。

5.视图层中 props接受不到数据,写也没有用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/612618
推荐阅读
相关标签
  

闽ICP备14008679号