vue.js 가 echarts 를 통합 할 때 발생 하 는 문제 요약

4179 단어 vue.js집성echarts
머리말
최근 에 Beetlex 의 데이터 분석 플랫폼 을 만 들 고 이 제품 을 개발 하 는 과정 에서 대량의 데이터 도표 전시 기능 과 관련된다.제품 전단 에 vuejs 개발 을 사용 하기 때문에 echarts 를 통합 하 는 데 다소 문제 가 발생 할 수 있 습 니 다.여기 서 발생 하 는 문제 와 해결 방법 을 설명 합 니 다.
설명 하기 전에 실제 사용 효 과 를 공유 하 세 요.구체 적 으로 보면http://data.beetlex.io

컨트롤 ID
 vuejs 에 서 는 자주 사용 하 는 기능 에 대해 구성 요 소 를 패키지 합 니 다.마찬가지 로 서로 다른 도 표를 재 활용 하기 위해 구성 요소 로 패키지 하여 사용 합 니 다.이 패 키 징 과정 에서 문제 가 존재 하 는 것 은 바로 도표 요소 DIV 의 ID 문제 이기 때문에 구성 요소 가 도표 DIV 를 구축 하 는 ID 도 유일 성 을 확보 해 야 한다.간단 한 함 수 를 봉인 하여 ID 를 생 성 할 수 있 습 니 다.

Vue.prototype.$getID = function () {
    page.controlid = page.controlid + 1;
    return page.controlid;
};
이 방법 을 통 해 동적 요소 ID 를 가 져 옵 니 다.

mounted(){
     this.ChatID = "chat_" + this.$getID();
}
<div :id="ChatID">
​
</div>
문제 초기 화
Vuejs 를 사용 할 때 mounted()방법 에서 실 시 를 하 는 경우 가 많 지만 여기 서 echarts 를 실 시 했 을 때 주의해 야 합 니 다.mounted 는 모든 요소 가 구축 되 는 것 을 의미 하지 않 기 때문에 요 소 를 얻 는 데 실패 하여 echarts 를 초기 화 할 수 없습니다.따라서 echarts 를 한 방법 에 넣 고 상황 에 따라 수 동 으로 호출 하거나 호출 초기 화 를 지연 시 켜 야 합 니 다.편 의 를 위해 setTimeout 을 사용 하여 초기 화 했 습 니 다.

setTimeout(() => {
    var dom = document.getElementById(this.ChatID);
    this.Chat = echarts.init(dom, 'macarons');
    this.Chat.setOption(this.ChatOption, true);
}, 300);
질문
그래프 를 표시 전환 하려 면 v-if 와 같은 문법 을 사용 하지 않 는 것 이 좋 습 니 다.이러한 문법 은 DOM 에서 관련 요 소 를 구축 하지 않 기 때문에 echarts 가 Canvas 요 소 를 만 드 는 문제 로 인해 정상적으로 작 동 하지 못 합 니 다.가장 좋 은 방법 은 Css 를 전환 하 는 방식 으로 디 스 플레이 전환 을 하여 구 축 된 DOM 요소 의 내용 이 변경 되 지 않도록 하 는 것 입 니 다.
적응 레이아웃
창의 큰 변화 와 구성 요소 전환 후 echarts 가 현재 레이아웃 에 적응 하지 못 할 때 가 많 습 니 다.이 경우 echarts 의 resize 방법 을 수 동 으로 호출 하여 디 스 플레이 레이아웃 을 리 셋 해 야 합 니 다.실제로 SPA 응용 프로그램 에 서 는 상황 이 매우 복잡 합 니 다.전체 화면 에 창 을 바 꾸 고 구성 요소 화 후 다 차원 내장 되 어 있어 echarts 가 어디 에 사용 되 는 지 확인 하기 어렵 습 니 다.서로 다른 상황 의 수 요 를 만족 시 키 기 위해 서 는 이러한 변경 을 촉발 하 는 공공 행위 가 필요 하 다.

var __resizeHandlers = [];
function __addResizeHandler(handler) {
    __resizeHandlers.push(handler);
};
function __resize() {
    setTimeout(() => {
        __resizeHandlers.forEach(v => {
            v();
        });
    }, 100);
}
window.onresize = function () {
    __resizeHandlers.forEach(v => {
        v();
    });
};
Vue.prototype.$addResize = function (handler) {
    __addResizeHandler(handler);
};
Vue.prototype.$resize = function () {
    __resize();
};
간단 한 resize 등록 과 호출 체 제 를 실현 하면 echarts 구성 요소 정의 아래 코드 를 사용 하여 완벽 하 게 해결 할 수 있 습 니 다.

this.$addResize(r => {
     if (this.Chat)
            this.Chat.resize();
});
첨부:Echarts 다운로드 사용
다음 과 같은 몇 가지 방법 으로 ECharts 를 얻 을 수 있 습 니 다.
1.Apache ECharts(incubating)홈 페이지 다운로드 인터페이스 에서 공식 소스 패 키 지 를 가 져 와 구축 합 니 다.
2,ECharts 의 GitHub 에서 가 져 옵 니 다.
3,npm 를 통 해 echarts,npm install echarts--save,
4,jsDelivr 등 CDN 도입
다음 그림 처럼 나타 나 면 성공 합 니 다.

끌어들이다
(다운로드 완료 전제)
1.구 축 된 echarts 파일 을 탭 으로 직접 도입 합 니 다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <!--    ECharts    -->
    <script src="echarts.min.js"></script>
</head>
</html>
2,전역 참조
vue 의 main.js 에서

//   echarts
import echarts from 'echarts'
Vue.prototype.$echarts = echarts
3.구성 요소 에 echarts 를 직접 도입 합 니 다.
(다른 구성 요소 에서 echarts 를 사용 하려 면 다시 도입 해 야 합 니 다)

import echarts from “echarts”;
총결산
vue.js 통합 echarts 에 문제 가 있 는 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 vue.js 통합 echarts 문제 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기