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

Vue中封裝eCharts組件及優(yōu)化方式

 更新時(shí)間:2024年03月12日 08:36:26   作者:Lim_J  
這篇文章主要介紹了Vue中封裝eCharts組件及優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Vue封裝eCharts組件及優(yōu)化

Vue中想要使用eCharts作為一個(gè)單獨(dú)的組件進(jìn)行封裝,一般需要考慮的是option的封裝、視口變化或數(shù)據(jù)變化更新eCharts視圖,以及在組件銷毀之前注銷eCharts組件以釋放其占用的內(nèi)存。

option的封裝思路

一般情況下,一個(gè)業(yè)務(wù)模塊內(nèi)eCharts的風(fēng)格只有固定的幾種內(nèi)容,因此僅需要對(duì)固定的幾種模式進(jìn)行封裝即可,我這里采用生成option的方式節(jié)約代碼量

generateOptionFrom(originalChartData, options = {}) {
	// do something with originalData
	let series = doSomething(originalChartData);
	return {
		name: '',
		legend: [],
		tooltip: {},
		// ...
		series,
		...options
	};
}

eCharts組件封裝要點(diǎn)

eCharts組件和直接在js中更新eCharts有些許不同,js調(diào)用時(shí),數(shù)據(jù)更新需要調(diào)用API中的setOption,Vue組件中想要更新組件,由于數(shù)據(jù)并不是掛載到DOM屬性上的,因此需要用watch監(jiān)聽數(shù)據(jù)更新

<template>
	<div class="charts" ref="eCharts">
    </div>
</template>
<script>
import * as echart from 'echarts';
export default {
	 props: {
        options: {
            type: Object
        },
        height: {
            type: String,
            default: '300px'
        }
    },
    mounted() {
    	// eCharts在初始化的時(shí)候有時(shí)捕捉不到元素高度,這里手動(dòng)設(shè)置一下
        this.$refs.eCharts.style.height = this.height;
        this.$nextTick(() => {
            this.initChart(this.options);
        });
    },
    beforeDestroy() {
    	// 組件銷毀時(shí)主動(dòng)釋放eCharts內(nèi)存空間
        const chartsInstance = echart.getInstanceByDom(this.$refs.eCharts);
        chartsInstance && chartsInstance.dispose();
        window.onresize = null;
    },
    watch: {
		options() {
			const chartsInstance = echart.getInstanceByDom(this.$refs.eCharts);
        	chartsInstance && chartsInstance.setOption(this.options);
		}
	},
	methods: {
		initChart() {
			if (!this.$refs.eCharts) {
				// 確保執(zhí)行初始化時(shí)Container存在
				return;
			}
			const chartInstace = echart.init(this.$refs.eCharts);
			chartInstace.setOption(this.options);
			// 視口大小變化時(shí)調(diào)用resize調(diào)整eCharts大小,如果Container尺寸并非自適應(yīng)則無(wú)需設(shè)置
			window.onresize = function () {
				chartInstace.resize();
			};
			// ...add other operations or events
		}
	}
}
</script>

這里使用ref去找Container元素是利用Vue的優(yōu)勢(shì),比起使用選取dom的方式方便很多

Vue封裝echarts組件多次調(diào)用出現(xiàn)id重復(fù)

問(wèn)題描述

封裝的echarts組件多次被調(diào)用,id重復(fù),導(dǎo)致頁(yè)面不渲染、數(shù)據(jù)覆蓋等一系列問(wèn)題

解決方法

1、把id改成動(dòng)態(tài)傳參(這里就不作代碼展示了)

2、把id換成ref

//修改前 
<div id="vcharts" style="width: 100%; height: 500px"></div>
//修改后
<div ref="vcharts" style="width: 100%; height: 500px"></div>
   
//修改前
let myChart = this.$echarts.init(document.getElementById("vcharts"));
//修改后
let myChart = this.$echarts.init(this.$refs.vcharts);

總結(jié)

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

相關(guān)文章

  • Vue編譯器解析compile源碼解析

    Vue編譯器解析compile源碼解析

    這篇文章主要為大家介紹了Vue編譯器解析compile源碼解析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • vue2手機(jī)APP項(xiàng)目添加開屏廣告或者閃屏廣告

    vue2手機(jī)APP項(xiàng)目添加開屏廣告或者閃屏廣告

    這篇文章主要為大家詳細(xì)介紹了vue2手機(jī)APP項(xiàng)目添加開屏廣告或者閃屏廣告的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • vue中解決el-date-picker更改樣式不生效問(wèn)題

    vue中解決el-date-picker更改樣式不生效問(wèn)題

    在使用Vue.js進(jìn)行前端開發(fā)的過(guò)程中,Element?UI?是一個(gè)非常流行的UI庫(kù),它提供了一套完整的組件來(lái)快速搭建美觀的用戶界面,但是我們經(jīng)常遇到一個(gè)問(wèn)題使用Element?UI提供的el-date-picker組件時(shí),嘗試自定義其樣式卻無(wú)法生效,所以本文給大家介紹如何解決這個(gè)問(wèn)題
    2024-10-10
  • Vue和原生JS中如何使用自定義字體

    Vue和原生JS中如何使用自定義字體

    這篇文章主要為大家詳細(xì)介紹了Vue和原生JS中如何使用自定義字體,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解下
    2024-01-01
  • 在Vue項(xiàng)目中使用自定義字體的操作步驟

    在Vue項(xiàng)目中使用自定義字體的操作步驟

    在項(xiàng)目中使用自定義字體可以提升頁(yè)面的視覺(jué)效果,并確保在不同設(shè)備上的一致性,文中通過(guò)代碼示例給出了具體的操作步驟,對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • 詳解vue 實(shí)例方法和數(shù)據(jù)

    詳解vue 實(shí)例方法和數(shù)據(jù)

    這篇文章主要介紹了vue 實(shí)例方法和數(shù)據(jù)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-10-10
  • vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決

    vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決

    這篇文章主要介紹了vue關(guān)于重置表單數(shù)據(jù)出現(xiàn)undefined的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue2中compiler和runtime模式報(bào)錯(cuò)template compiler is not available

    Vue2中compiler和runtime模式報(bào)錯(cuò)template compiler is 

    本文主要介紹了Vue2中compiler和runtime模式報(bào)錯(cuò)template compiler is not available,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Vue路由前后端設(shè)計(jì)總結(jié)

    Vue路由前后端設(shè)計(jì)總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于Vue路由前后端設(shè)計(jì)的知識(shí)點(diǎn)總結(jié)內(nèi)容,需要的朋友們參考下。
    2019-08-08
  • vue3使用Facebook嵌入式視頻播放器API方法詳解

    vue3使用Facebook嵌入式視頻播放器API方法詳解

    這篇文章主要為大家介紹了vue3使用Facebook嵌入式視頻播放器API方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論

嘉黎县| 蓬安县| 临桂县| 阜康市| 土默特左旗| 张家口市| 高唐县| 绥芬河市| 台安县| 巨鹿县| 保山市| 霍林郭勒市| 田东县| 芒康县| 娄烦县| 高雄县| 梁山县| 吉隆县| 平陆县| 庆阳市| 建阳市| 临桂县| 龙泉市| 通许县| 阳春市| 南雄市| 元江| 广灵县| 鄂托克前旗| 保靖县| 衡阳市| 安康市| 来宾市| 池州市| 西贡区| 孟连| 沂水县| 天门市| 义乌市| 灵寿县| 名山县|