echarts と vue.js を統合する際に発生するいくつかの問題の概要

echarts と vue.js を統合する際に発生するいくつかの問題の概要

序文

現在、私は Beetlex のデータ分析プラットフォームに取り組んでいます。この製品の開発では、多数のデータチャート表示機能が関わってきます。製品のフロントエンドは vuejs を使用して開発されているため、echarts を統合する際には多かれ少なかれ問題が発生します。ここでは主に遭遇した問題とその解決策について説明します。

説明の前に、実際の使用効果をシェアさせてください。詳細については、http://data.beetlex.io をご覧ください。

コントロールID

vuejs では、よく使用される関数はコンポーネントにカプセル化されることがよくあります。同様に、さまざまなチャートを再利用するために、それらもコンポーネントにカプセル化されて使用されます。このカプセル化プロセスには、チャート要素 DIV の ID の問題という問題があるため、コンポーネントによって構築されるチャート DIV の ID も一意性を確保する必要があります。簡単な関数をカプセル化することでIDを生成できる

Vue.prototype.$getID = 関数 () {
    ページ.コントロールID = ページ.コントロールID + 1;
    page.controlid を返します。
};

このメソッドを使用して動的要素IDを取得します

マウントされた(){
     this.ChatID = "chat_" + this.$getID();
}
<div :id="チャットID">
​
</div>

初期化の問題

Vuejs を使用する場合、mounted() メソッド内で何らかの初期化が行われることが多いのですが、ここで echarts を初期化する場合は注意が必要です。結局、mounted はすべての要素が構築されていることを意味するわけではありません。これにより、要素の取得に失敗し、echarts の初期化に失敗します。そのため、echarts をメソッドに入れて状況に応じて手動で呼び出すか、初期化のために呼び出しを遅らせる必要があります。便宜上、初期化には setTimeout が使用されます。

タイムアウトを設定する(() => {
    var dom = document.getElementById(this.ChatID);
    this.Chat = echarts.init(dom, 'マカロン');
    this.Chat.setOption(this.ChatOption, true);
}, 300);

表示切り替えの問題

チャートの表示を切り替える必要がある場合は、v-if などの構文を使用しないことをお勧めします。このような構文では、DOM に関連要素が構築されず、echarts によって Canvas 要素が作成され、正しく動作しなくなるためです。構築された DOM 要素の内容が変更されないように、CSS を切り替えて表示を切り替えるのが最善の方法です。

適応レイアウト

多くの場合、フォームやコンポーネントの切り替えに大きな変更があると、echarts が現在のレイアウトに適応できなくなります。この場合、echarts の resize メソッドを手動で呼び出して、表示レイアウトをリセットする必要があります。実際、SPA アプリケーションの状況ははるかに複雑です。全画面表示があり、フォームを変更する必要があり、コンポーネント化後に多階層にネストされているため、echarts がどこで使用されているかを判断するのは困難です。さまざまな状況のニーズを満たすには、これらの変更をトリガーする共通の動作が必要です。

var __resizeHandlers = [];
関数__addResizeHandler(ハンドラ) {
    __resizeHandlers.push(ハンドラ);
};
関数__resize() {
    タイムアウトを設定する(() => {
        __resizeHandlers.forEach(v => {
            v();
        });
    }, 100);
}
window.onresize = 関数 () {
    __resizeHandlers.forEach(v => {
        v();
    });
};
Vue.prototype.$addResize = 関数 (ハンドラー) {
    __addResizeHandler(ハンドラ);
};
Vue.prototype.$resize = 関数 () {
    __resize();
};

単純なサイズ変更登録と呼び出しメカニズムを実装し、echartsコンポーネントに次のコードを定義するだけで、完全に解決できます。

this.$addResize(r => {
     if (this.Chat)
            this.Chat.resize();
});

付録: Echarts のダウンロードと使用

EChartsは以下の方法で入手できます。

1. Apache ECharts (incubating) 公式 Web サイトのダウンロード インターフェイスから公式ソース コード パッケージを取得し、ビルドします。

2. ECharts の GitHub から入手します。

3. npm 経由で echarts を取得します。npm install echarts --save、

4. jsDelivrなどのCDN経由でインポートする

以下の図が表示されれば成功です。


導入

(ダウンロードの前提条件)

1. 構築された echarts ファイルをタグを通じて直接インポートします。

<!DOCTYPE html>
<html>
<ヘッド>
    <メタ文字セット="utf-8">
    <!-- ECharts ファイルをインポート-->
    <script src="echarts.min.js"></script>
</head>
</html>

2. グローバルリファレンス

vueのmain.js内

// echarts をインポート
'echarts' から echarts をインポートします
Vue.prototype.$echarts = echarts

3. eChartsをコンポーネントに直接導入する

(他のコンポーネントでechartsを使用する場合は、再導入する必要があります)

「echarts」からechartsをインポートします。

要約する

echarts と vue.js を統合する際に発生する問題についての記事はこれで終わりです。echarts と vue.js を統合する際に発生する問題の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • JSはキャンバス技術を使用してeChartsの棒グラフを模倣します
  • vue print.js print は Echarts チャート操作をサポートします
  • Echarts.jsは問題解決を導入できない
  • echarts のサイズ変更問題を解決するためにネイティブ js と組み合わせた vue について
  • echarts.js は、vue カプセル化コンポーネント操作を使用して複数のチャートを動的に生成します。
  • IDEA で Echarts を Web に導入する 2 つの方法の詳細な説明 (js ファイルと Maven 依存関係のインポートを使用)
  • Baidu ECharts プラグインを使用して JavaScript で円グラフを描画する例
  • JavaScript ECharts の使用方法の説明

<<:  ubuntu15.10 での hadoop2.7.2 の詳細なインストールと設定

>>:  MySQL メタデータで Hive テーブル作成ステートメントのコメント スクリプトを生成する方法

推薦する

Vue Element-ui フォーム検証ルールの実装

目次1. はじめに2. ルール検証の入力モード2.1 サンプルコード2.2、フォーム項目2.3. 小...

アダプティブ Web デザインを実現する方法に関する関連知識ポイントの要約

「アダプティブ Web デザイン」はどのように機能しますか?実はそれほど難しいことではありません。 ...

H5ウェイクアップアプリの実装方法と注意点のまとめ

目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...

CSS 3D からソースコードによる空間座標軸へ

かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...

Vueはechartを使用してラベルと色をカスタマイズします

この記事では、参考までに、echartを使用してタグと色をカスタマイズするVueの具体的なコードを紹...

CSS 共通スタイルで二重矢印を描画するサンプルコード

1. 単一の矢印への複数の呼び出し単一の矢印を実装したら、二重矢印を実装するのは簡単です。上では、単...

js を使用してネットワークカメラを呼び出し、一般的なエラーを処理します

最近、業務上の理由により、Web ページ上のさまざまなネットワーク カメラにアクセスしてデバッグする...

MySQL は SQL ステートメントの最新のレコードをクエリします (最適化)

最悪の選択肢は、結果を時間順に並べ替えて最初のものを取ることです。 *から選択 ここで、create...

JavaScript における 3 つの for ループ ステートメントの使用の概要 (for、for...in、for...of)

序文JS に触れるすべての開発者は、必然的に for ループを扱うことになります。結局のところ、fo...

nginxアクセス制御の実装例

高性能で軽量なウェブサービスソフトウェアであるNginxについて高い安定性 システムリソースの消費量...

Ubuntu 16.04.5LTS に SVN をインストールする手順

この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...

クロスドメイン js フロントエンドの 8 つの実装ソリューション

目次1. jsonp クロスドメイン2. document.domain + iframe クロスド...

Linux コマンドラインで他のユーザーと通信する方法

Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...

Vue のフィルターウィジェットの詳細な使用方法

この記事では、参考までにVue More Filter Itemウィジェットの実装方法を例として紹介...