最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

vue3 Echarts頁面加載不渲染顯示空白頁面

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

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

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

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

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

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

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

父組件:

獲取到數(shù)據(jù)后通過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è)空表出來 必須等獲取到數(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)聽,在生命周期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)文章

最新評論

柘荣县| 东方市| 奉新县| 乐平市| 息烽县| 泰来县| 察雅县| 通山县| 兴隆县| 泸定县| 顺昌县| 彭山县| 彰化县| 进贤县| 延寿县| 大新县| 蓝山县| 蕲春县| 犍为县| 镇原县| 隆德县| 大庆市| 怀仁县| 辽阳县| 福州市| 铅山县| 建瓯市| 汝阳县| 扬州市| 香港 | 叙永县| 柯坪县| 莱芜市| 平和县| 通江县| 宿松县| 富蕴县| 宜昌市| 双城市| 青田县| 聂拉木县|