> 웹 프론트엔드 > View.js > vue3에서 ECharts 구성 요소를 캡슐화하는 방법

vue3에서 ECharts 구성 요소를 캡슐화하는 방법

王林
풀어 주다: 2023-05-20 15:22:06
앞으로
2112명이 탐색했습니다.

1. 서문

프런트 엔드 개발에서는 데이터 정보를 렌더링하기 위해 ECharts 차트를 사용해야 하는 경우가 많습니다. 재사용을 위해 ECharts 구성 요소를 캡슐화해야 하는 경우가 많습니다. .

2. ECharts 구성 요소 캡슐화

구성 요소를 캡슐화해야 하는 이유

  • 작업 부하 중복 방지 및 재사용성 향상

  • 코드 로직을 더 명확하게 만들고 프로젝트의 향후 유지 관리를 용이하게 합니다

  • 구성 요소 캡슐화 이를 통해 사용자는 구성 요소의 내부 구현 및 원칙에 신경 쓰지 않아도 되며 팀이 더 나은 계층적 방식으로 운영될 수 있습니다.

캡슐화된 ECharts 구성 요소는 다음 기능을 구현합니다.

  • 구성 요소 전달 사용 ECharts의 속성option

  • 차트 크기를 수동/자동으로 설정

  • 차트 적응형 너비 및 높이

  • 획득한 백엔드 데이터의 동적 표시

이 문서에서는 vue를 사용합니다. 3+ 타이프스크립트 작성 방법.

코드 구현:

ECharts 구성 요소:
<template>
  <div :id="id" :class="className" : />
</template>
<script setup lang="ts">
//按需导入需要用到的 vue函数 和 echarts
import { onMounted, onBeforeUnmount, defineProps, watch } from "vue";
import * as echarts from &#39;echarts&#39;;
//获取 dom 和 父组件数据 并定义"myChart"用于初始化图表
let myChart: echarts.ECharts;
const props = defineProps({
  id: {
    type: String,
    default: &#39;chart&#39;,
    required: true
  },
  className: {
    type: String,
    default: &#39;&#39;
  },
  width: {
    type: String,
    default: &#39;100%&#39;,
  },
  height: {
    type: String,
    default: &#39;300px&#39;,
  },
  loading: {
    type: Boolean,
    default: true,
  },
  fullOptions: {
    type: Object,
    default: () => ({}),
    required: true
  },
})
//重绘图表函数
const resizeHandler = () => {
  myChart.resize();
}
//设置防抖,保证无论拖动窗口大小,只执行一次获取浏览器宽高的方法
const debounce = (fun: { (): void; (): void; }, delay: number | undefined) => {
  let timer: number | undefined;
  return function () {
    if (timer) {
      clearTimeout(timer);
    }
    timer = setTimeout(() => {
      fun();
    }, delay);
  }
};
const cancalDebounce = debounce(resizeHandler, 50);
//页面成功渲染,开始绘制图表
onMounted(() => {
  //配置为 svg 形式,预防页面缩放而出现模糊问题;图表过于复杂时建议使用 Canvas
  myChart = echarts.init(document.getElementById(props.id) as HTMLDivElement, { renderer: &#39;svg&#39; })
  myChart.showLoading({
    text: &#39;&#39;,
    color: &#39;#409eff&#39;,
    textColor: &#39;#000&#39;,
    maskColor: &#39;rgba(255, 255, 255, .95)&#39;,
    zlevel: 0,
    lineWidth: 2,
  });
  if (!props.loading) {
    myChart.hideLoading();
    myChart.setOption(props.fullOptions.options, true);
  }
  //自适应不同屏幕时改变图表尺寸
  window.addEventListener(&#39;resize&#39;, cancalDebounce);
})
//页面销毁前,销毁事件和实例
onBeforeUnmount(() => {
  window.removeEventListener(&#39;resize&#39;, cancalDebounce)
  myChart.dispose()
})
//监听图表数据时候变化,重新渲染图表
watch(() => [props.fullOptions.options, props.loading], () => {
  if (!props.loading) {
    myChart.hideLoading();
    myChart.setOption(props.fullOptions.options, true);
  }
}, { deep: true })
</script>
로그인 후 복사
ECharts 구성 요소 사용법:
<template>
  <Echarts
    id="echarts"
    height="300px"
    :full-options="echartsOptions"
    :loading="loading"
  >
  </Echarts>
</template>
 
<script setup lang="ts">
// 引进Echarts 组件
import Echarts from &#39;@/components/Echarts/Echarts.vue&#39;;
// 引进Echarts 的options配置文件,可根据项目模块来创建该配置文件
import chartOption from &#39;@/components/Echarts/options&#39;;
 
const echartsOptions = reactive({
  options: { },
  init: false
});
// 此处可请求接口来获取数据
// 我的options配置使用的是dataset的形式,传进options中的两个参数data(图表的数据)和dimension(图表的维度),
onMounted(() => {
  const testData = [26,27,24,23];
  const testDimensions = [&#39;家用电器&#39;,&#39;户外运动&#39;,&#39;汽车用品&#39;,&#39;手机数码&#39;];
  echartsOptions.options = chartOption.testOption(testData, testDimensions);
});
</script>
로그인 후 복사

효과:

vue3에서 ECharts 구성 요소를 캡슐화하는 방법

위 내용은 vue3에서 ECharts 구성 요소를 캡슐화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿