欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3+Echarts頁(yè)面加載不渲染顯示空白頁(yè)面的解決

 更新時(shí)間:2022年10月19日 16:04:32   作者:二向箔_唯一操作者  
這篇文章主要介紹了vue3+Echarts頁(yè)面加載不渲染顯示空白頁(yè)面的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue3 Echarts頁(yè)面加載不渲染顯示空白頁(yè)面

在父組件獲取到數(shù)據(jù)后傳遞給子組件并沒(méi)有及時(shí)的更新渲染圖表。

在本地開(kāi)發(fā)環(huán)境是沒(méi)有一點(diǎn)問(wèn)題,但發(fā)布到測(cè)試環(huán)境上每次頁(yè)面加載都不渲染,點(diǎn)擊瀏覽器刷新按鈕后才會(huì)去渲染圖表。

個(gè)人認(rèn)為造成這個(gè)問(wèn)題的原因

頁(yè)面加載子組件dom元素此時(shí)還沒(méi)有加載完成,所以看到的就是空白,只有刷新一下才可以。

解決這個(gè)問(wèn)題的方法

在生命周期里面使用 nextTick()待dom加載完成之后再去渲染圖表```

具體實(shí)現(xiàn)代碼:

父組件:

獲取到數(shù)據(jù)后通過(guò)props 傳遞給子組件

```javascript
?<!--入駐統(tǒng)計(jì)折線圖-->
? <hostLine ref="settled" :settledData="settledData"> ? </hostLine>
? // 獲取入駐統(tǒng)計(jì)
? ?async getSettledData() {
? ? ? ? const result = await getProjectSettled();
? ? ? ? // 如果后臺(tái)返回的數(shù)據(jù)是空 前端就渲染一個(gè)空表出來(lái) 必須等獲取到數(shù)據(jù)以后在渲染 Echarts
? ? ? ? if (result.success) {
? ? ? ? ? if (result.data.companyCount.length === 0 && result.data.stationCount.length === 0) {
? ? ? ? ? ? Object.assign(data.settledData);
? ? ? ? ? } else {
? ? ? ? ? ? Object.assign(data.settledData, result.data);
? ? ? ? ? }
? ? ? ? ? update.value = new Date().getTime();
? ? ? ? }
? ? ? },

子組件:

接收父組件傳遞的數(shù)據(jù)并進(jìn)行 watch 監(jiān)聽(tīng),在生命周期onMounted里面使用 nextTick進(jìn)行渲染圖表就行了。

<template>
  <div class="line-overview">
    <div class="host-line">
      <div class="host-line-title">入駐統(tǒng)計(jì)</div>
      <div id="hostLine" style="width: 100%; height: 360px"></div>
    </div>
  </div>
</template>
<script lang="ts">
import * as echarts from "echarts/core";
import { TooltipComponent, LegendComponent, GridComponent, } from 'echarts/components';
import { LineChart } from 'echarts/charts';
import { CanvasRenderer } from 'echarts/renderers';
import { UniversalTransition } from 'echarts/features';
import { defineComponent, inject, watch, onMounted, onUnmounted, ref, shallowRef, nextTick  } from "vue";
echarts.use([
  TooltipComponent,
  LegendComponent,
  GridComponent,
  LineChart,
  CanvasRenderer,
  UniversalTransition
]);
export default defineComponent({
  props: ["settledData"],
  setup(props) {
    const update = inject("update");
    const LineChart = shallowRef();
    const drawChart = () => {
      const cahrtData = props.settledData;
      LineChart.value = echarts.init(document.getElementById("hostLine") as HTMLElement);
      // 指定圖表的配置項(xiàng)和數(shù)據(jù)
      let option = {
        tooltip: {
          trigger: "axis",
        },
        legend: {
          data: ['企業(yè)數(shù)量', '工位數(shù)量',]
        },
        grid: {
          left: "3%",
          right: "4%",
          bottom: "3%",
          containLabel: true,
        },
        xAxis: {
          type: "category",
          boundaryGap: false,
          data: cahrtData?.date.reverse()
        },
        // Y標(biāo)尺固定
        yAxis: {
            type: "value",
            scale: true,
            // // boundaryGap: [0.2, 0.2],
            // // 動(dòng)態(tài)設(shè)置Y軸的刻度值 只取整數(shù)
            min: (value:Record<string,number>) => {
              return Math.floor(value.min / 100) * 100;
            },
            max: (value:Record<string,number>) => {
              return Math.ceil(value.max / 100) * 100;
            },
        },
        series: [
          {
            name: "企業(yè)數(shù)量",
            type: "line",
            stack: "Total",
            data: cahrtData?.companyCount,
          },
          {
            name: "工位數(shù)量",
            type: "line",
            stack: "Total",
            data: cahrtData?.stationCount,
          },
        ],
      };
      // 使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
      LineChart.value.setOption(option);
      window.addEventListener("resize", () => {
        LineChart.value.resize();
      });
    };
    onMounted(() => {
      watch([update], () => {
        nextTick(()=>{
          drawChart();
        })
      }, {
        deep: true
      })
    });
    onUnmounted(() => {
      LineChart.value.dispose();
    });
  },
});
</script>

vue Echarts白屏或等一會(huì)才出現(xiàn)

原因

由于是異步加載數(shù)據(jù),setOption的時(shí)候div的寬高還是0,導(dǎo)致canvas渲染寬高也是0。

解決方法

加上默認(rèn)的width和height

<div class="echarts-vue" style="width:500px; height:500px" ></div>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 關(guān)掉vue插件Vetur格式化的時(shí)候自動(dòng)添加的樣式操作

    關(guān)掉vue插件Vetur格式化的時(shí)候自動(dòng)添加的樣式操作

    這篇文章主要介紹了關(guān)掉vue插件Vetur格式化的時(shí)候自動(dòng)添加的樣式操作,文章圍繞主題展開(kāi)操作過(guò)程,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-05-05
  • vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例

    vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例

    下面小編就為大家分享一篇vue2.0 computed 計(jì)算list循環(huán)后累加值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • Vue對(duì)話(huà)框組件使用方法詳解

    Vue對(duì)話(huà)框組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue對(duì)話(huà)框組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺談mvvm-simple雙向綁定簡(jiǎn)單實(shí)現(xiàn)

    淺談mvvm-simple雙向綁定簡(jiǎn)單實(shí)現(xiàn)

    本篇文章主要介紹了淺談mvvm-simple雙向綁定簡(jiǎn)單實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 詳解Vue3的七種組件通信方式

    詳解Vue3的七種組件通信方式

    本篇文章將詳解介紹Vue3中如下七種組件通信方式:props、emit、v-model、refs、provide/inject、eventBus、vuex/pinia(狀態(tài)管理工具)。感興趣的可以了解一下
    2022-02-02
  • vuex中使用modules時(shí)遇到的坑及問(wèn)題

    vuex中使用modules時(shí)遇到的坑及問(wèn)題

    這篇文章主要介紹了vuex中使用modules時(shí)遇到的坑及問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 基于Vue實(shí)現(xiàn)鼠標(biāo)滾動(dòng)輪控制頁(yè)面橫向滑動(dòng)效果

    基于Vue實(shí)現(xiàn)鼠標(biāo)滾動(dòng)輪控制頁(yè)面橫向滑動(dòng)效果

    這篇文章主要介紹了如何基于Vue實(shí)現(xiàn)鼠標(biāo)滾動(dòng)輪控制頁(yè)面橫向滑動(dòng)效果,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • vue3中利用Export2Excel將數(shù)據(jù)導(dǎo)出為excel表格

    vue3中利用Export2Excel將數(shù)據(jù)導(dǎo)出為excel表格

    這篇文章主要給大家介紹了關(guān)于vue3中利用Export2Excel將數(shù)據(jù)導(dǎo)出為excel表格的相關(guān)資料,最近項(xiàng)目需要前端來(lái)導(dǎo)出Excel操作,所以給大家總結(jié)下,需要的朋友可以參考下
    2023-09-09
  • Vue實(shí)現(xiàn)PDF文件預(yù)覽的方法詳解

    Vue實(shí)現(xiàn)PDF文件預(yù)覽的方法詳解

    pdf文件預(yù)覽是開(kāi)發(fā)業(yè)務(wù)時(shí)常見(jiàn)的一個(gè)交互,在toB項(xiàng)目中是經(jīng)常用到的,對(duì)于用戶(hù)上傳文件,預(yù)覽文件等操作時(shí)有一個(gè)更好的體驗(yàn),下面我結(jié)合實(shí)際業(yè)務(wù),在vue的基礎(chǔ)上與大家分享這個(gè)實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-09-09
  • vue.js實(shí)現(xiàn)只彈一次彈框

    vue.js實(shí)現(xiàn)只彈一次彈框

    本篇文章通過(guò)代碼實(shí)例給大家詳細(xì)講述了一個(gè)vue的實(shí)例,實(shí)現(xiàn)只彈一次彈框功能,一起學(xué)習(xí)分享下。
    2018-01-01

最新評(píng)論