WeChatアプレット+EChartsで動的更新プロセス記録を実現

WeChatアプレット+EChartsで動的更新プロセス記録を実現

序文

最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-chart を選択しましたが、ニーズを満たせないことがわかりました。最終的に ECharts を選択しましたが、いくつかの落とし穴に陥りました。インターネットで情報を収集することで、ようやく理解し、実装プロセスを記録しました。

方法の例

1. まず、ECharts の公式 Web サイトにアクセスしてサンプルをダウンロードし、ec-canvas ファイルをコピーして自分のプロジェクトに配置します。

2. 次に、必要なページをインポートして xxx.json に追加します。ここでのパスに注意してください。私のページはすべて pages フォルダーに配置されています。

"コンポーネントの使用": {
    "ec-canvas": "../../ec-canvas/ec-canvas"
 }

3. では、本題に入りましょう。2 つのグラフがあるページの例を示します。まずは、シンプルなレイアウトとスタイルを正しく設定しましょう。

xxx.wxml:

キャンバス ボックスを 2 つ用意する必要があります。

<view class="content">
    <ec-canvas id="mychart-one" canvas-id="mychart-multi-one" ec="{{ecOne}}"></ec-canvas>
    <ec-canvas id="mychart-two" canvas-id="mychart-multi-two" ec="{{ ecTwo }}"></ec-canvas>
</ビュー>

xxx.wxss:

。コンテンツ {
    幅: 100%;
    背景色: #F2F2F2;
    オーバーフロー-y: 自動;
}
#マイチャート-1 {
    位置: 絶対; 
    上: 0;
    高さ: 50%;
    左: 0;
    右: 0;
}
#mychart-2 {
    位置: 絶対; 
    上位: 50%;
    高さ: 50%;
    左: 0;
    右: 0;
}

ここで注目すべき点は、3 つ、4 つ、またはそれ以上のグラフを配置する場合は、キャンバス ボックスの高さを設定する必要があるということです。そうしないと、最後の 2 つのグラフが表示されなくなります。 !多くの公式チャートには高さが設定されていなかったので、公式のものに従っていくつかの写真を配置しましたが、どれも同じ効果が得られませんでした。私は疲れて長い間探し回った後、それがスタイルの問題であることに気づきました。私は単に各ボックスに50%の高さを設定しました。

4. さて、準備がすべて完了したので、次のステップは主要部分です。(実際、私が書いたものは複雑すぎて、繰り返しのコードがたくさんあると思いますが、今はそれを統合する時間がありません。興味のある友人は、それを統合するための独自の方法を書いてください。)

xx.js

まず最初に、ページの先頭に公式コンポーネントを紹介します。

'../../ec-canvas/echarts' から * を echarts としてインポートします。

まずテーブルに表示するスタイル設定を設定します

関数setOption(チャート、xdata、ydata) {
    const オプション = {
        タイトル:
            テキスト: 'テスト'、
            パディング: [10, 0, 0, 20],
            テキストスタイル: {
                フォントサイズ: 14,
                色: '#696969'
            },
            上: '10rpx'
        },
        背景色: "#fff",
        色: ["#006EFF", "#67E0E3", "#9FE6B8"],
        アニメーション: false、
        グリッド: {
            表示:偽
        },
        x軸:
            タイプ: 'カテゴリ',
            data: xdata, //x軸のデータは動的なので、パラメータとして渡します axisLabel: {
                interval: 5, //x軸間隔表示スケール formatter: function (value) { //時間を表示 var date = new Date(value * 1000);
                    var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
                    var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes());
                    h + m を返す
                },
                フォントサイズ: 8
            }
        },
        y軸: {
            x: '中心'、
            スケール: 真、
            タイプ: '値',
            軸ラベル: {
                フォーマッタ: 関数 (値) {
                var val = 値 / 1000000000 + 'G';
                    戻り値
                }
            }
        },
        シリーズ: [{
            タイプ: 'line'、
            data: ydata, //y軸のデータも動的であり、パラメータとして渡されます。シンボル: 'none',
            線のスタイル:
                幅: 1
            }
        }]
    };
    chart.setOption(オプション)
}

ページを書くいくつかの方法

ページ({
    データ: {
        ecOne: {
            遅延ロード: true
        },
        ecTwo: {
            遅延ロード: true
        },
        timer:'' //リアルタイムで更新したいのでタイマーを設定します},
    onLoad: 関数 (オプション) {
        var _this = これ;
        this.getOneOption();
        このオプションは、
        this.setData({ //1分ごとに更新タイマー: setInterval(function () {
                    _this.getOneOption();
                    _this.getTwoOption();
                }, 60000)
        })
    },
    onReady: function () { //このステップには注意を払う必要があります this.oneComponent = this.selectComponent('#mychart-one');  
        this.twoComponent = this.selectComponent('#mychart-two');
    },
    onUnload: 関数 () {
        クリア間隔(this.data.timer)
    },
    init_one: function (xdata, ydata) { // 最初のチャートを初期化します this.oneComponent.init((canvas, width, height) => {
            const chart = echarts.init(canvas, null, {
                幅: 幅、
                高さ: 高さ
            });
            setOption(チャート、xデータ、yデータ)
            this.chart = チャート;
            リターンチャート;
        });
    },
    init_two: function (xdata, ydata) { // 2番目のチャートを初期化します this.storagemaxComponent.init((canvas, width, height) => {
            const chart = echarts.init(canvas, null, {
                幅: 幅、
                高さ: 高さ
            });
            setOption(チャート、xデータ、yデータ)
            this.chart = チャート;
            リターンチャート;
        });
    },
    getOneOption: function () { //このステップでは、実際にチャートにデータを追加する必要があります var _this = this;
        wx.リクエスト({
            url: 'https://xxxxxxx.com', //データを要求するインターフェースアドレス method: 'POST',
            ヘッダー: {
                「コンテンツタイプ」: 「application/json」
            },
            data: { // 渡されたパラメータ。これについてはこれ以上説明する必要はありません id: xxxx
            },
            成功:function(res){
     //ここでは、res.xdata と res.ydata が必要なデータ、つまり x 軸と y 軸に表示されるデータであると想定しています。これらは配列である必要があることに注意してください。
                _this.init_one(res.xdata、res.ydata) は、
            }
        })  
    },
    //2番目のチャートも同様に処理されます getTwoOption: function () {  
        var _this = これ;
        wx.リクエスト({
            url: 'https://xxxxxxx.com', //データを要求するインターフェースアドレス method: 'POST',
            ヘッダー: {
                「コンテンツタイプ」: 「application/json」
            },
            data: { // 渡されたパラメータ。これについてはこれ以上説明する必要はありません id: xxxx
            },
            成功:function(res){
                _this.init_two(res.xdata、res.ydata) は、
            }
        })  
    }
})

さて、これが大まかな手順です。動的に変更する必要がある場合は、それをパラメータとして渡します。ここでは onUnload のタイマーをクリアしました。これが明確でないと、別のページにジャンプしたときにリクエストが継続されるので、このページを離れる前にタイマーをクリアする必要があります。私は技術の専門家ではないので、もっと良い方法があれば、ぜひ訂正していただければ幸いです。ハハハ

要約する

これで、WeChatミニプログラム+ EChartsによる動的更新の実現に関するこの記事は終了です。WeChatミニプログラム+ EChartsの動的更新に関するより関連性の高いコンテンツについては、123WORDPRESS.COMで以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • WeChatアプレットでechartsを使用する方法
  • WeChatアプレットでEchartsチャートコンポーネントを使用する方法の詳細な説明
  • WeChatアプレットはechartsを使用してデータを取得し、折れ線グラフを生成します
  • ECharts を使用して WeChat アプレットでデータを非同期的にロードする方法

<<:  CentOS 7.4 にソースコードから MySQL 8.0 をインストールするための詳細なチュートリアル

>>:  Linuxカーネルの浮動小数点演算のサポートに関する簡単な説明

推薦する

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

Navicat for MySql ビジュアルインポート CSV ファイル

この記事では、参考までに、Navicat for MySql の CSV ファイルのビジュアルインポ...

階層化されたピラミッドを実現するための HTML+CSS の例

この記事では主に、HTML+CSS で階層化ピラミッドを実装する例を紹介し、皆さんと共有します。詳細...

WeChatアプレットのスクロールビューは、プルアップ時にデータの読み込みを重複させるソリューションを実装しています。

WeChat アプレットのスクロール ビューでは、プルアップして読み込むときにバグが多く発生します...

K8Sの5つのコントローラーの紹介と使用

目次k8sのコントローラータイプポッドとコントローラの関係デプロイメント(ステートレスアプリケーショ...

Vue がコンポーネント通信を実装する 8 つの例

目次1. Props 親コンポーネント ---> 子コンポーネント通信2. $emit 子コン...

Linux での grep コマンドの使い方の詳細な説明

Linux grep コマンドLinux の grep コマンドは、ファイル内の条件を満たす文字列を...

MySQL インデックス プッシュダウンを 5 分で学ぶ

目次序文インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックス...

UnityはMySQLに接続し、テーブルデータの実装コードを読み取ります

表は以下のとおりです。 Unity が読み取って呼び出すときのコード: データベース内の別のテーブル...

jsは前のページに戻り、コードを更新します

1. Javascript は前のページ history.go(-1) に戻り、2 つのページを返し...

CSS ブラウザ互換性の問題に対する 4 つの解決策

フロントエンドは、技術が急速に進化するだけでなく、知っておくべき事柄が多すぎるという理由で大変な仕事...

JSはプログレスバーのスムーズバージョンの詳細な計画を実装します

進捗バーがスムーズではないフロントエンドを学ぶ学生のほとんどは、オーディオプレーヤーやビデオプレーヤ...

JSはreduce()メソッドを使用してツリー構造データを処理します

目次意味文法例1. 初期値initが渡されない2. 初期値を渡す場合3. アレイの重複排除4. Re...

Nexus サーバーを設定するための詳細な手順

1. ネクサスサービス構築の意義イントラネットの統合プロキシとして、チームで共同開発する場合、全員が...