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

vue3使用echarts并封裝echarts組件方式

 更新時(shí)間:2022年10月19日 11:19:46   作者:大橘為重¨  
這篇文章主要介紹了vue3使用echarts并封裝echarts組件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

本文使用的echarts版本為5.3.1,詳細(xì)文檔可見(jiàn):

Echarts 官方文檔

文中案例基于vue3編寫(xiě),有關(guān)js部分使用的是"script setup"語(yǔ)法糖形式

一、安裝并導(dǎo)入echart

1.npm下載包

npm i echarts --save

2.配置echarts

這里介紹使用 provide 和 injec 配置 echartst

provide、injec 可以實(shí)現(xiàn)嵌套組件之間進(jìn)行傳遞數(shù)據(jù)和方法

在父組件使用provide可向子代組件傳遞數(shù)據(jù);子級(jí)組件使用inject來(lái)獲取上級(jí)組件傳遞過(guò)來(lái)的數(shù)據(jù)

注:這兩個(gè)函數(shù)都是在setup函數(shù)中使用的

在 app.vue 下

<script>
import { provide } from 'vue'
import * as echarts from 'echarts'
export default {
  setup() {
    provide('echarts', echarts)
  },
};
</script>

在子代組件,使用 inject 獲取 echarts 后便可使用

<script setup>
import { inject } from "vue"
const echarts = inject("echarts")
</script>

二、使用echarts

這里舉一個(gè)小例子:

<template>
    <div class="echart" ref="chartDom"></div>
</template>
<script setup>
//按需導(dǎo)入需要用到的 vue函數(shù) 和echarts
import { ref, inject, onMounted } from "vue";
const echarts = inject("echarts");
//獲取 dom 和 父組件數(shù)據(jù) 并定義"myChart"用于初始化圖表
const chartDom = ref()
let myChart = null;
let option = reactive ({
    title: { text: "總用戶量" },
    tooltip: {},
    xAxis: {
        data: ["12-3", "12-4", "12-5", "12-6", "12-7", "12-8"],
    },
    yAxis: {},
    series: [
        {
            name: "用戶量",
            type: "line",
            data: [5, 20, 36, 10, 10, 20],
        },
    ],
})
//頁(yè)面成功渲染,開(kāi)始繪制圖表
onMounted(() => {
    myChart = echarts.init(chartDom.value)
    myChart.setOption(props.option, true);
})
</script>
<style lang="scss" scoped>
.echart {
    width: 800px;
    height: 500px;
}
</style>

效果:

三、封裝echarts為組件

echarts封裝組件:

<template>
    <div class="echart" ref="chartDom"></div>
</template>
<script setup>
//按需導(dǎo)入需要用到的 vue函數(shù) 和 echarts
import { ref, inject, onMounted, onBeforeUnmount, defineProps, watch } from "vue";
const echarts = inject("echarts");
//獲取 dom 和 父組件數(shù)據(jù) 并定義"myChart"用于初始化圖表
const chartDom = ref()
let myChart = null;
const props = defineProps({
    option: Object,
})
//重繪圖表函數(shù)
const resizeHandler = () => {
    myChart.resize();
}
//設(shè)置防抖,保證無(wú)論拖動(dòng)窗口大小,只執(zhí)行一次獲取瀏覽器寬高的方法
const debounce = (fun, delay) => {
    let timer;
    return function () {
        if (timer) {
            clearTimeout(timer);
        }
        timer = setTimeout(() => {
            fun();
        }, delay);
    }
};
const cancalDebounce = debounce(resizeHandler, 500);
//頁(yè)面成功渲染,開(kāi)始繪制圖表
onMounted(() => {
	//配置為 svg 形式,預(yù)防頁(yè)面縮放而出現(xiàn)模糊問(wèn)題;圖表過(guò)于復(fù)雜時(shí)建議使用 Canvas
    myChart = echarts.init(chartDom.value,null, {renderer:'svg'})
    // myChart = echarts.init(chartDom.value)
    myChart.setOption(props.option, true);
    //自適應(yīng)不同屏幕時(shí)改變圖表尺寸
    window.addEventListener('resize', cancalDebounce);
})
//頁(yè)面銷毀前,銷毀事件和實(shí)例
onBeforeUnmount(() => {
    window.removeEventListener('resize', cancalDebounce)
    myChart.dispose()
})
//監(jiān)聽(tīng)圖表數(shù)據(jù)時(shí)候變化,重新渲染圖表
watch(() => props.option, () => {
    myChart.setOption(props.option, true);
}, { deep: true })
</script>
<style lang="scss" scoped>
.echart {
    width: 100%;
    height: 100%
}
</style>

上面的在不同屏幕大小下自適應(yīng)重繪圖表需在 flexible.js 的配置下才有效,有關(guān) flexible 的配置可參考 “移動(dòng)端與大屏幕自適應(yīng)適配方案

注:在調(diào)用該組件時(shí)需傳入 option配置值 和 設(shè)置組件大小

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

相關(guān)文章

  • element?el-tooltip實(shí)現(xiàn)自定義修改樣式

    element?el-tooltip實(shí)現(xiàn)自定義修改樣式

    本文主要介紹了element?el-tooltip實(shí)現(xiàn)自定義修改樣式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 詳細(xì)分析vue響應(yīng)式原理

    詳細(xì)分析vue響應(yīng)式原理

    這篇文章主要介紹了vue響應(yīng)式原理的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • vue-table實(shí)現(xiàn)添加和刪除

    vue-table實(shí)現(xiàn)添加和刪除

    這篇文章主要為大家詳細(xì)介紹了vue-table實(shí)現(xiàn)添加和刪除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • ubuntu中利用nginx部署vue項(xiàng)目的完整步驟

    ubuntu中利用nginx部署vue項(xiàng)目的完整步驟

    Nginx是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,在BSD-like 協(xié)議下發(fā)行,下面這篇文章主要給大家介紹了關(guān)于ubuntu中利用nginx部署vue項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • 詳解Vue爬坑之vuex初識(shí)

    詳解Vue爬坑之vuex初識(shí)

    本篇文章主要介紹了詳解Vue爬坑之vuex初識(shí) ,Vue 的狀態(tài)管理工具 Vuex可以解決大型項(xiàng)目中子組件之間傳遞數(shù)據(jù),有興趣的可以了解下
    2017-06-06
  • Vue2集成Lodop插件實(shí)現(xiàn)在線打印功能

    Vue2集成Lodop插件實(shí)現(xiàn)在線打印功能

    這篇文章主要為大家詳細(xì)介紹了Vue2如何集成Lodop插件實(shí)現(xiàn)在線打印功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例

    本篇文章主要介紹了vue2 中如何實(shí)現(xiàn)動(dòng)態(tài)表單增刪改查實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • 詳解如何使用webpack打包Vue工程

    詳解如何使用webpack打包Vue工程

    本篇文章主要介紹了詳解如何使用webpack打包Vue工程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Vue使用vux-ui自定義表單驗(yàn)證遇到的問(wèn)題及解決方法

    Vue使用vux-ui自定義表單驗(yàn)證遇到的問(wèn)題及解決方法

    這篇文章主要介紹了Vue使用vux-ui自定義表單驗(yàn)證遇到的問(wèn)題及解決方法,需要的朋友可以參考下
    2018-05-05
  • vue-class-setup?編寫(xiě)?class?風(fēng)格組合式API

    vue-class-setup?編寫(xiě)?class?風(fēng)格組合式API

    這篇文章主要為大家介紹了vue-class-setup?編寫(xiě)?class?風(fēng)格組合式API,支持Vue2和Vue3,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

泰和县| 噶尔县| 敦化市| 吴旗县| 九江县| 兴宁市| 安西县| 康保县| 新巴尔虎右旗| 沾化县| 宁明县| 阳泉市| 阳泉市| 名山县| 若尔盖县| 泗洪县| 玛多县| 大港区| 聂拉木县| 盐源县| 湘潭市| 宁安市| 田阳县| 涡阳县| 会东县| 三亚市| 齐河县| 彭山县| 吐鲁番市| 大庆市| 清苑县| 阿拉尔市| 和静县| 密云县| 静宁县| 闻喜县| 永吉县| 富裕县| 武山县| 南宫市| 福贡县|