vue3封裝echarts圖表數(shù)據(jù)無法渲染到頁(yè)面問題
vue3封裝echarts圖表數(shù)據(jù)無法渲染到頁(yè)面
問題是后端的數(shù)據(jù)已經(jīng)成功返回到前端了,但是Echarts圖表一直不能被渲染,卡了一個(gè)多小時(shí),最后問gpt才解決(gptyyds?。。。?/p>
methods: { loadGet() { this.$axios.get(this.$httpUrl + '/goods/count').then(res => res.data).then(res => { console.log(res) // this.cntdata = res.data if (res.code == 200) { // this.yData = res.data // this.cntData.length=0; for (let i = 0; i < res.data.length; i++) { this.cntData.push(res.data[i]); } console.log("data = =" + this.cntData + res.data.length) this.$message({ message: '操作成功!', type: 'success' }); } else { this.$message({ message: '操作失?。?, type: 'error' }); } }) }, init() { //調(diào)用session中的用戶數(shù)據(jù) this.user = JSON.parse(sessionStorage.getItem('CurUser')) }, initEcharts() { let option = { title: { text: "現(xiàn)存物資量" }, tooltip: {}, legend: { data: [""] }, xAxis: { data: ["鼠標(biāo)", "帳篷", "鍵盤", "口罩", "礦泉水", "棉被"] }, yAxis: {}, series: [ { name: "發(fā)放量", type: "bar", //類型為柱狀圖 // data: [5, 20, 36, 10, 10, 20] data: this.cntData //問題出在這 data一直不能被后端返回的this.cntData渲染! } ] }; const myChart = echarts.init(this.$refs.mychart);// 圖標(biāo)初始化 myChart.setOption(option);// 渲染頁(yè)面 //隨著屏幕大小調(diào)節(jié)圖表 window.addEventListener("resize", () => { myChart.resize(); }); }, }, created() { this.init() } } </script>
原文
- 我:這份代碼中ECharts圖標(biāo)中的 series 中的data無法被后端傳來的數(shù)據(jù)渲染怎么辦
- gpt:在你提供的代碼中,ECharts 圖表的數(shù)據(jù)被初始化為 this.cntData,但 this.cntData 在組件創(chuàng)建時(shí)是一個(gè)空數(shù)組。要使圖表能夠根據(jù)后端傳來的數(shù)據(jù)進(jìn)行渲染,你需要確保在數(shù)據(jù)加載完成后再初始化圖表。
- 為了實(shí)現(xiàn)這一點(diǎn),你可以在 loadGet 方法成功獲取數(shù)據(jù)后調(diào)用 initEcharts 方法來初始化圖表。這確保了數(shù)據(jù)已經(jīng)準(zhǔn)備好并且可以在圖表中使用。
下面是修改后的代碼片段:
methods: { loadGet() { this.$axios.get(this.$httpUrl + '/goods/count').then(res => res.data).then(res => { console.log(res); if (res.code === 200) { this.cntData = res.data; // 將數(shù)據(jù)賦值給 cntData this.initEcharts(); // 初始化圖表 !!!!!!這里! this.$message({ message: '操作成功!', type: 'success' }); } else { this.$message({ message: '操作失?。?, type: 'error' }); } }); }, initEcharts() { let option = { // ... 其余圖表配置 ... series: [ { name: "發(fā)放量", type: "bar", //類型為柱狀圖 data: this.cntData // 使用從后端獲取的數(shù)據(jù) } ] }; const myChart = echarts.init(this.$refs.mychart); myChart.setOption(option); window.addEventListener("resize", () => { myChart.resize(); }); }, // ... 其他方法 ... },
我:其中的mounted方法是先于beforeMount運(yùn)行的嗎
gpt:不對(duì),beforeMount 方法在 mounted 方法之前執(zhí)行。
Vue.js 生命周期中的順序是如下的:
beforeCreate
:在實(shí)例初始化之后,數(shù)據(jù)觀測(cè) (data observation) 和事件配置 (event/watcher setup) 之前被調(diào)用。這時(shí)實(shí)例還沒有初始化完成,數(shù)據(jù)和事件方法尚不可用。created
:在實(shí)例創(chuàng)建完成后被立即調(diào)用。在這一步,實(shí)例已完成以下的配置:數(shù)據(jù)觀測(cè)(data observation),屬性和方法的運(yùn)算,watch/event事件回調(diào)。然而,掛載階段還沒開始,DOM 元素也還沒有被創(chuàng)建。beforeMount
:在掛載開始之前被調(diào)用:相關(guān)的 render 函數(shù)首次被調(diào)用。mounted
:el 被新創(chuàng)建的 vm.$el 替換,并掛載到實(shí)例上去之后調(diào)用該鉤子。
所以,beforeMount 在 mounted 之前執(zhí)行,它們分別位于 Vue 實(shí)例生命周期的不同階段。
–沒看懂。。。。
我:那為什么this.cntData不能去填充圖標(biāo)的data
gpt:?jiǎn)栴}可能是由于異步操作的原因。在你的代碼中,loadGet 方法通過異步請(qǐng)求從后端獲取數(shù)據(jù),并在獲取數(shù)據(jù)后調(diào)用initEcharts 方法。然而,由于異步請(qǐng)求的性質(zhì),initEcharts 方法可能在數(shù)據(jù)還沒有獲取到時(shí)就被調(diào)用了,導(dǎo)致 this.cntData 仍然是空數(shù)組。
要解決這個(gè)問題,你可以確保在數(shù)據(jù)成功獲取后再調(diào)用 initEcharts 方法。你已經(jīng)在 loadGet
方法中進(jìn)行了這個(gè)調(diào)用,但是需要注意確保數(shù)據(jù)獲取成功后才執(zhí)行這個(gè)調(diào)用。
看懂了好像…
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟詳解
相信大部分Vue開發(fā)者都使用過vue-cli來構(gòu)建項(xiàng)目,它的確很方便,但對(duì)于很多初級(jí)開發(fā)者來說,還是要踩不少坑的,下面這篇文章主要給大家介紹了關(guān)于使用vue-cli創(chuàng)建vue2項(xiàng)目的實(shí)戰(zhàn)步驟,需要的朋友可以參考下2023-01-01vue中獲取滾動(dòng)table的可視頁(yè)面寬度調(diào)整表頭與列對(duì)齊(每列寬度不都相同)
這篇文章主要介紹了vue中獲取滾動(dòng)table的可視頁(yè)面寬度,調(diào)整表頭與列對(duì)齊(每列寬度不都相同),需要的朋友可以參考下2019-08-08基于Vue2.0+ElementUI實(shí)現(xiàn)表格翻頁(yè)功能
Element UI 是一套采用 Vue 2.0 作為基礎(chǔ)框架實(shí)現(xiàn)的組件庫(kù),它面向企業(yè)級(jí)的后臺(tái)應(yīng)用,能夠幫助你快速地搭建網(wǎng)站,極大地減少研發(fā)的人力與時(shí)間成本。這篇文章主要介紹了Vue2.0+ElementUI實(shí)現(xiàn)表格翻頁(yè)功能,需要的朋友可以參考下2017-10-10vue.js 解決v-model讓select默認(rèn)選中不生效的問題
這篇文章主要介紹了vue.js 解決v-model讓select默認(rèn)選中不生效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-07-07