欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

基于uniapp小程序的Echarts最佳解決方案!

admin
2024年12月28日 20:9 本文熱度 66

對于在小程序中寫Echarts,其實不少人存在「矛盾點」。最經典的比如,你又想用Uniapp開發小程序,又想在原生里看效果,可各種Echarts庫,「試來試去,時常報錯+視圖消失,找來找去,各種包瘋狂安裝,還是用不起來,所以就讓人很苦悶。」

因此從一開始,在寫小程序的時候,就要后續會出現的問題,通通考慮清楚,在極大程度上會「減輕你的開發負荷」

因此,這一次,咱們聊聊——「《基于uniapp小程序的Echarts使用問題》」,vue2 or vue3到底如何選型?如何安裝并順利使用?后續一系列會出現的bug,也會統統羅列,并給出解決方案。

「拜托拜托」:大家的點贊是我更新的最大動力!!!

一.對于Vue2+uniapp+Echarts庫的選擇方案

寫這篇攻略的目的很簡單,那就是網上關于小程序Echarts部分,信息過于細碎,每個人的解決方案都不同,給一部分繞暈,耽誤兩天時間......所以這次一把給你講個夠!

首先需要講的是,vue2+uniapp開發小程序的話,你的首選可以定為「echarts-for-wx」,前幾年Echarts專門為了適配小程序,而開發出的「工具包」

「盡管更新日期維持在2020年,但放在今天,同樣可以便捷使用在實際項目中,表現同樣炸裂!」

對于Echarts-for-wx的安裝,我的建議是,直接「下載ZIP源碼」,然后挪到自己的項目里,再配置各種引用地址這種,是最穩妥的。(所以你也別再走彎路了,看完你就拿下它了)

「源碼地址放在這里,大家直接用即可」:https://github.com/yah0130/echarts-wx-uniapp

把里面這個uni-ec-canvas文件夾下載下來,放在你的項目中

但是這里要注意一點,先建一個components文件夾,再把uni-ec-canvas放進去,具體情況你可以看下圖:

然后咱們去Echarts官網,我挑一個圖表,用來演示一下:(挑一個好看的)

第一步,先寫template:
       <view>        <uni-ec-canvas class="uni-ec-canvas" id="line-chart" canvas-id="multi-charts-line" :ec="ec" ref="canvas"></uni-ec-canvas>      </view>

    然后把數據項ec定義一下:(放在data里)

          ec: {        option: {}      },

      接著你要在script標簽里,導入如下兩個依賴:

        import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas';import * as echarts from '@/components/uni-ec-canvas/echarts.js';

        導入之后要注冊組件:

            components: {    uniEcCanvas  },

          然后咱們把數據option,從Echarts官網,給粘貼過來,當然你也可以在Echarts官網修改成自己想要的樣子,然后再移植,同理。

          這里需要講的是,小程序的寫法,會有一點“「花招」”,從獲取容器,再到掛載數據等等,你都可以在方法中定義好,然后在“鉤子函數”里進行相應的“初始化操作”。(所以這里我的option,沒有寫在data里)

          「代碼奉上」

            initChart(canvas, width, height, canvasDpr) {      let chart = echarts.init(canvas, null, {        width: width,        height: height,        devicePixelRatio: canvasDpr      });      canvas.setChart(chart);      let option = {        xAxis: {          data: ['點', '擊', '柱', '子', '或', '者', '兩', '指', '在', '觸', '屏', '上', '滑', '動', '能', '夠', '自', '動', '縮', '放'],          axisLabel: {            inside: true,            color: '#fff'          },          axisTick: {            show: false          },          axisLine: {            show: false          },          z: 10        },        yAxis: {          axisLine: {            show: false          },          axisTick: {            show: false          },          axisLabel: {            color: '#999'          }        },        dataZoom: [          {            type: 'inside'          }        ],        series: [          {            type: 'bar',            itemStyle: {              color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [                { offset: 0, color: '#83bff6' },                { offset: 0.5, color: '#188df0' },                { offset: 1, color: '#188df0' }              ])            },            emphasis: {              itemStyle: {                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [                  { offset: 0, color: '#2378f7' },                  { offset: 0.7, color: '#2378f7' },                  { offset: 1, color: '#83bff6' }                ])              }            },            data: [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220]          }        ]      };      chart.setOption(option);      console.log('chart', chart.getOption());      const dataAxis = chart.getOption().xAxis[0].data;      const zoomSize = 6;      let data = [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220];      chart.on('click', function (params) {        // console.log(this.dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);        chart.dispatchAction({          type: 'dataZoom',          startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],          endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]        });      });      return chart;

            你在用的時候,可以直接用我這一套,寫在methods里,從上到下,依次做了以下幾步操作:

            「1」. 初始化實例,并且綁定到canvas上

            「2」. 定義option數據(注意不要寫成options!!!)

            「3」. 通過setOption進行掛載

            「4」. 對具體圖表,進行定制化操作

            當然你要注意一點的是,在小程序中,如何往Echarts綁定事件?比如經典的click、mouse等等,其實和PC還是很類似的。

            上述代碼中,chart.on就是很好的例子,你可以看一看,一眼就懂。

            「咱們定義完initChart之后,接下來要做的當然是使用它:(在鉤子里進行調用)」

               mounted() {    this.$refs.canvas.init(this.initChart);  },

              上述內容做完之后,咱們預覽一下:

              當然這里要注意,很多人會在原生里碰到諸多bug,因此這里給一些解決方案。

              比如如果你碰到這個問題,那么第一時間,要去看canvas,看你掛載的option,是否存在,是否正常。

              舉個例子,如果你的data中的ec沒寫option,那么也會出現這種問題。(后面我會把我所有代碼奉上,只要參考對了,就會規避這個bug)

              還有的問題比較常見,比如以下這個問題:

              這個你就要去找“容器”的問題,如何獲取的?ref還是id還是......,打印輸出一下,看看有沒有獲取到。

              另外就是在Hbuild里面,打開谷歌瀏覽器,看不到內容,可是在真機里,又能看到內容,怎么辦?(對方已經很清晰告訴你了,改正即可)

              最后代碼一五一十,全部奉上,上手Echarts就不是什么難題了!(因為我這里有一些業務代碼,已經自行刪除了部分,所以這個版本,你可以直接用,但會有一些沒用的變量,你自己刪除就好,提前告知一下)

              <template>
               <view class="container">
                 <!-- echarts板塊 -->
                 <view>
                   <view>
                     <uni-ec-canvas class="uni-ec-canvas" id="line-chart" canvas-id="multi-charts-line" :ec="ec" ref="canvas"></uni-ec-canvas>
                   </view>
                 </view>
              </template>

              <script>
              import uniEcCanvas from '@/components/uni-ec-canvas/uni-ec-canvas';
              import * as echarts from '@/components/uni-ec-canvas/echarts.js';
              export default {
               data() {
                 return {
                   data: [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220],
                   yMax: 500,
                   zoomSize: 6,
                   dataShadow: [],
                   ec: {
                    option:{}
                   },
                   dataAxis: ['點', '擊', '柱', '子', '或', '者', '兩', '指', '在', '觸', '屏', '上', '滑', '動', '能', '夠', '自', '動', '縮', '放']
                 };
               },
               
               mounted() {
                 this.$refs.canvas.init(this.initChart);
               },
               

               components: {
                 uniEcCanvas
               },

               methods: {
                 initChart(canvas, width, height, canvasDpr) {
                   let chart = echarts.init(canvas, null, {
                     width: width,
                     height: height,
                     devicePixelRatio: canvasDpr
                   });
                   canvas.setChart(chart);
                   let option = {
                     xAxis: {
                       data: ['點', '擊', '柱', '子', '或', '者', '兩', '指', '在', '觸', '屏', '上', '滑', '動', '能', '夠', '自', '動', '縮', '放'],
                       axisLabel: {
                         inside: true,
                         color: '#fff'
                       },
                       axisTick: {
                         show: false
                       },
                       axisLine: {
                         show: false
                       },
                       z: 10
                     },
                     yAxis: {
                       axisLine: {
                         show: false
                       },
                       axisTick: {
                         show: false
                       },
                       axisLabel: {
                         color: '#999'
                       }
                     },
                     dataZoom: [
                       {
                         type: 'inside'
                       }
                     ],
                     series: [
                       {
                         type: 'bar',
                         itemStyle: {
                           color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                             { offset: 0, color: '#83bff6' },
                             { offset: 0.5, color: '#188df0' },
                             { offset: 1, color: '#188df0' }
                           ])
                         },
                         emphasis: {
                           itemStyle: {
                             color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                               { offset: 0, color: '#2378f7' },
                               { offset: 0.7, color: '#2378f7' },
                               { offset: 1, color: '#83bff6' }
                             ])
                           }
                         },
                         data: [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220]
                       }
                     ]
                   };
                   chart.setOption(option);
                   console.log('chart', chart.getOption());
                   const dataAxis = chart.getOption().xAxis[0].data;
                   const zoomSize = 6;
                   let data = [220, 182, 191, 234, 290, 330, 310, 123, 442, 321, 90, 149, 210, 122, 133, 334, 198, 123, 125, 220];
                   chart.on('click', function (params) {
                     // console.log(this.dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)]);
                     chart.dispatchAction({
                       type: 'dataZoom',
                       startValue: dataAxis[Math.max(params.dataIndex - zoomSize / 2, 0)],
                       endValue: dataAxis[Math.min(params.dataIndex + zoomSize / 2, data.length - 1)]
                     });
                   });
                   return chart;
                 },

              };
              </script>

              <style scoped>
              .container {
               background-color: rgb(238, 238, 239);
               display: flex;
               flex-direction: column;
               /* justify-content: center; */
               align-items: center;
               height: 100vh; /* 設置容器高度為視口高度,使其占滿整個屏幕 */
              }

              </style>

              二.對于Vue3+uniapp+Echarts庫的選擇方案

              vue3生態相對來講,加入echarts就很簡單了,咱們直接用這一款。有的人叫它“「lime-echart」",其實就是咱們PC的echarts。

              目前各端兼容性還不錯,也在一直更新

              安裝的時候,咱們還是下載源碼,然后往項目中引入

              vue3 echarts地址:https://gitee.com/liangei/lime-echart

              整體下載完之后,咱們把components文件夾,直接放在項目中。

              然后把static文件夾的內容,全部放在項目的static文件中,我把項目圖放一下,大家一看便知:

              接下來,把我這段代碼放上,里面其實無非還是引入依賴,然后把例子放上,你可以感受一下,直接出圖:

              <template>
               <view>
                 <view class="title">我的主頁</view>
                 <view>
                   <LEchart class="echart" ref="chart" @finished="init"></LEchart>
                 </view>
               </view>
              </template>

              <script setup>
              import LEchart from '@/components/l-echart/l-echart.vue';
              // lime-echart是一個demo的組件,用于測試組件
              // import LEchart from '@/components/lime-echart/lime-echart.vue'
              import { onMounted, reactive, ref } from 'vue';

              // 由于vue3 使用vite 不支持umd格式的包,小程序依然可以使用,但需要使用require
              const echarts = require('../../static/echarts.min');

              let chart = ref(); // 獲取dom
              const state = reactive({
               option: {}
              });
              state.option = {
               legend: {
                 show: true,
                 data: []
               },
               tooltip: {
                 trigger: 'axis',
                 axisPointer: {
                   type: 'cross'
                 }
               },
               grid: {
                 left: '3%',
                 right: '8%',
                 top: '15%',
                 bottom: '5%',
                 containLabel: true
               },
               xAxis: {
                 type: 'category',
                 data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 4, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
                 axisLabel: {
                   // inside: true,
                   // color: '#fff'
                 },
                 axisTick: {
                   show: false
                 },
                 axisLine: {
                   show: true,
                   lineStyle: {
                     color: '#83bff6'
                   }
                 },
                 z: 10
               },
               yAxis: {
                 type: 'value',
                 axisLine: {
                   show: true,
                   lineStyle: {
                     color: '#83bff6'
                   }
                 },
                 axisTick: {
                   show: false
                 },
                 // axisLabel: {
                 //   color: '#999'
                 // },
                 splitLine: {
                   show: true,
                   lineStyle: {
                     type: 'dashed',
                     color: '#83bff6'
                   }
                 }
               },
               series: [
                 {
                   data: [100, 110, 113, 126, 143, 158, 165, 167, 152, 102, ,],
                   type: 'bar',
                   itemStyle: {
                     color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                       { offset: 0, color: '#83bff6' },
                       { offset: 0.5, color: '#188df0' },
                       { offset: 1, color: '#188df0' }
                     ])
                   },
                   emphasis: {
                     itemStyle: {
                       color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                         { offset: 0, color: '#2378f7' },
                         { offset: 0.7, color: '#2378f7' },
                         { offset: 1, color: '#83bff6' }
                       ])
                     }
                   },
                   areaStyle: {
                     show: true,
                     color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
                       {
                         offset: 0,
                         color: '#188df0'
                       },
                       {
                         offset: 1,
                         color: '#fff'
                       }
                     ])
                   }
                 }
               ],
               color: ['#83bff6']
              };
              // 組件能被調用必須是組件的節點已經被渲染到頁面上
              onMounted(() => {
               chart.value.init(echarts, (chart) => {
                 chart.setOption(state.option);
               });
              });

              // 渲染完成
              const init = () => {
               console.log('渲染完成');
              };
              </script>

              <style scopedlang="scss" scoped>
              .echart {
               width: 100%;
               height: 300px;
              }

              .title {
               text-align: center;
              }
              </style>

              需要注意的是,目前部分人給出的安裝方案,一是要挪安裝包,一個是npm下載,事實證明,選其一即可,我選的是前者,也很穩妥,照做即可。

              最后放上效果圖:

              完結撒花!

              ?

              閱讀原文:原文鏈接


              該文章在 2024/12/30 15:54:44 編輯過
              關鍵字查詢
              相關文章
              正在查詢...
              點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
              點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
              點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
              點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
              Copyright 2010-2025 ClickSun All Rights Reserved