vue3使用echart的兩種引入方式以及注意事項(xiàng)說明
創(chuàng)建好vue3項(xiàng)目后安裝echarts
終端輸入:
npm i echarts --save
安裝好后:
1.直接在組件中引用echarts
<script setup> ? ? ? ? import * as echarts from 'echarts' ? </script>
2.全局引入,一般在app.vue
app.vue (provide 和 inject的使用)
<script setup>
? ? ? ? import * as echarts from 'echarts' ?
? ? ? ? provide('echarts',echarts)
</script>在需要用echarts的組件中用inject獲取
<script setup>
? ? ? ? const echarts ?= inject('echarts')
</script>注意!??!vue掛載 、echarts渲染 、數(shù)據(jù)獲取三者的時(shí)間順序
1.先講vue掛載和echarts渲染
拿掛網(wǎng)的入門例子來說。(vue3 版本)
<script setup>
import * as echarts from 'echarts';
const myCharts = ref(null)
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var myChart = echarts.init(mycharts.value);
// 繪制圖表
myChart.setOption({
? title: {
? ? text: 'ECharts 入門示例'
? },
? tooltip: {},
? xAxis: {
? ? data: ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
? },
? yAxis: {},
? series: [
? ? {
? ? ? name: '銷量',
? ? ? type: 'bar',
? ? ? data: [5, 20, 36, 10, 10, 20]
? ? }
? ]
});
<script>開始我是這么寫的,開起來好像沒有問題。但是你一打開頁面就會(huì)發(fā)現(xiàn)數(shù)據(jù)沒有渲染上去。因?yàn)榇藭r(shí)vue還沒有掛載到dom元素上去,所以獲取不到dom元素,數(shù)據(jù)當(dāng)然不能渲染。
需要這么寫,把獲取dom元素和初始化myecharts的動(dòng)作放到onMounted(()=>{})中
<script setup>
import * as echarts from 'echarts';
onMounted(()=>{
const myCharts = ref(null)
// 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
var myChart = echarts.init(mycharts.value);
// 繪制圖表
myChart.setOption({
? title: {
? ? text: 'ECharts 入門示例'
? },
? tooltip: {},
? xAxis: {
? ? data: ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
? },
? yAxis: {},
? series: [
? ? {
? ? ? name: '銷量',
? ? ? type: 'bar',
? ? ? data: [5, 20, 36, 10, 10, 20]
? ? }
? ]
});
})
<script>vue3:你可以通過在生命周期鉤子前面加上 “on” 來訪問組件的生命周期鉤子。
我在<script setup>上加了setup,就等于在setup內(nèi)部.
下表包含如何在 setup () 內(nèi)部調(diào)用生命周期鉤子:
| 選項(xiàng)式 API | Hook inside setup |
|---|---|
| beforeCreate | Not needed* |
| created | Not needed* |
| beforeMount | onBeforeMount |
| mounted | onMounted |
| beforeUpdate | onBeforeUpdate |
| updated | onUpdated |
| beforeUnmount | onBeforeUnmount |
| unmounted | onUnmounted |
| errorCaptured | onErrorCaptured |
| renderTracked | onRenderTracked |
| renderTriggered | onRenderTriggered |
| activated | onActivated |
| deactivated | onDeactivated |
TIP:
因?yàn)?setup 是圍繞 beforeCreate 和 created 生命周期鉤子運(yùn)行的,所以不需要顯式地定義它們。換句話說,在這些鉤子中編寫的任何代碼都應(yīng)該直接在 setup 函數(shù)中編寫。
這些函數(shù)接受一個(gè)回調(diào)函數(shù),當(dāng)鉤子被組件調(diào)用時(shí)將會(huì)被執(zhí)行:
// MyBook.vue
?
export default {
? setup() {
? ? // mounted
? ? onMounted(() => {
? ? ? console.log('Component is mounted!')
? ? })
? }
}2.echarts渲染和數(shù)據(jù)獲取
通過axios獲取數(shù)據(jù)然后通過echarts渲染到頁面
如果是用的異步請求就要非常注意了!
簡單介紹一下異步請求:異步請求在執(zhí)行過程中是不會(huì)影響后面程序執(zhí)行的,好比如在主線程開辟了一個(gè)子線程。
如過異步獲取數(shù)據(jù),還在獲取中,echart已經(jīng)把dom元素渲染了,但是i請求的數(shù)據(jù)還沒返回回來,此時(shí)渲染的就是空數(shù)據(jù)。
所以用異步請求,可以把echart渲染和初始化放到axios.then()里面,這樣就不會(huì)出現(xiàn)渲染空數(shù)據(jù)了。
如下面:
<script setup>
import api from '@/api/index'
var keydata = []
var valuedata = []
const resdata = []
const wordsChartsBox = ref(null)
const echarts = inject('echarts')
function getf() {
api.get('/backstage').then(res => {
for (const key in res.data) {
var element = res.data[key]
if (key == 1) {
keydata = element
} else {
valuedata = element
}
}
for (let index = 0; index < keydata.length; index++) {
resdata.push(
{
value: parseInt(valuedata[index]),
name: keydata[index]
}
)
}
const wordsChartsOption = {
title: {
text: '常用詞統(tǒng)計(jì)',
subtext: '通過常用詞統(tǒng)計(jì)分析盲人需求',
left: 'center'
},
tooltip: {
trigger: 'item',
formatter: '{a} <br/> : {c} (izgmezk%)'
},
legend: {
type: 'scroll',
orient: 'vertical',
right: 10,
top: 20,
bottom: 20,
data: keydata
},
series: [
{
name: '姓名',
type: 'pie',
radius: '55%',
center: ['40%', '50%'],
data: resdata,
emphasis: {
itemStyle: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
}
const wordsCharts = echarts.init(wordsChartsBox.value)
wordsCharts.setOption(wordsChartsOption)
})
console.log(resdata)
}
onMounted(() => {
getf()
})
</script>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項(xiàng)目打包優(yōu)化的方法實(shí)戰(zhàn)記錄
最近入職了新公司,接手了一個(gè)新拆分出來的Vue項(xiàng)目,針對(duì)該項(xiàng)目做了個(gè)打包優(yōu)化,把經(jīng)驗(yàn)分享出來,下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目打包優(yōu)化的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
vue-router鉤子函數(shù)實(shí)現(xiàn)路由守衛(wèi)
這篇文章主要介紹了vue-router鉤子函數(shù)實(shí)現(xiàn)路由守衛(wèi),對(duì)vue感興趣的同學(xué),可以參考下2021-04-04
利用vue3+threejs仿iView官網(wǎng)大波浪特效實(shí)例
最近好幾個(gè)vue項(xiàng)目都是用ivew作為UI框架,所以下面這篇文章主要給大家介紹了關(guān)于如何利用vue3?+?threejs仿iView官網(wǎng)大波浪特效的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
Vue報(bào)錯(cuò):Injection?"xxxx"?not?found的解決辦法
這篇文章主要給大家介紹了關(guān)于Vue報(bào)錯(cuò):Injection?"xxxx"?not?found的解決辦法,文中通過圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
vue component 中引入less文件報(bào)錯(cuò) Module build failed
這篇文章主要介紹了vue component 中引入less文件報(bào)錯(cuò) Module build failed的解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
Vue3?實(shí)現(xiàn)一個(gè)自定義toast?小彈窗功能
這篇文章主要介紹了Vue3?實(shí)現(xiàn)一個(gè)自定義toast?小彈窗,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09
Fragment 占位組件不生成標(biāo)簽與路由組件lazyLoad案例
這篇文章主要為大家介紹了Fragment 占位組件不生成標(biāo)簽與路由組件lazyLoad案例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

