検索
ホームページウェブフロントエンドjsチュートリアルVue を使用して Echarts コンポーネントを動的に更新する方法

今回は、Vue が Echarts コンポーネントを動的に更新する方法を説明します。Vue が Echarts コンポーネントを動的に更新するために使用する 注意事項 について説明します。実際のケースを見てみましょう。

需要の背景: ダッシュボードは現在、エンタープライズ ミッドエンドおよびバックエンド製品の「顔」です。統計データをよりリアルタイムで効率的かつクールな方法で表示する方法は、フロントエンド開発エンジニアにとって検討に値する問題です。そしてUIデザイナー。今日は、データを動的にレンダリングする Echarts 折れ線グラフ コンポーネントを最初からカプセル化し、より興味深いコンポーネントについて一緒に考え始めます。

準備

プロジェクト構造の構築

制作上の必要性(実際には怠惰)のため、このチュートリアルでは ==vue-cli== を使用してプロジェクトのインフラストラクチャを構築します。

npm install -g vue-cli
vue init webpack vue-charts
cd vue-charts
npm run dev

Echarts をインストールします

npm を使用して直接インストールします。

npm install Echarts --save

Echartsのご紹介

//在main.js加入下面两行代码
import echarts from 'echarts'
Vue.prototype.$echarts = echarts //将echarts注册成Vue的全局属性

これで準備作業は完了です。

静的コンポーネント開発

「React プログラミングの思考」の記事にあまりにも深く毒されていたため、著者もコンポーネントを開発するときに基本から高度なものまで徐々に繰り返すことに慣れています。

静的コンポーネントの目的は非常に単純で、Echarts チャートをページにレンダリングすることです。

新しい Chart.vue ファイルを作成します

<template>
 <p></p>
</template>
<script>
export default {
 name: "Chart",
 data() {
  return {
   //echarts实例
   chart: ""  
  };
 },
 props: {
  //父组件需要传递的参数:id,width,height,option
  id: {
   type: String
  },
  width: {
   type: String,
   default: "100%"
  },
  height: {
   type: String,
   default: "300px"
  },
  option: {
   type: Object,
   //Object类型的prop值一定要用函数return出来,不然会报错。原理和data是一样的,
   //使用闭包保证一个vue实例拥有自己的一份props
   default() {
    return {
     title: {
      text: "vue-Echarts"
     },
     legend: {
      data: ["销量"]
     },
     xAxis: {
      data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子","tuoxie"]
     },
     series: [
      {
       name: "销量",
       type: "line",
       data: [5, 20, 36, 10, 10, 70]
      }
     ]
    };
   }
  }
 },
 computed: {
  style() {
   return {
    height: this.height,
    width: this.width
   };
  }
 },
 mounted() {
  this.init();
 },
 methods: {
  init() {
   this.chart = this.$echarts.init(document.getElementById(this.id));
   this.chart.setOption(this.option);
  }
 }
};
</script>

上記のファイルは、ページに単純な折れ線グラフをレンダリングするコンポーネントを実装しています。非常に単純ではないでしょうか。これを使用する最も簡単な方法は次のとおりです:

App.vue

<template>
 <p>
  <chart></chart>
 </p>
</template>
<script>
import Chart from "./components/Chart";
export default {
 name: "App",
 data() {},
 components: {
  Chart
 }
}
</script>

この時点で、プログラムを実行すると次の効果が確認できるはずです:

最初の反復

今基本バージョンはありますが、まだ不十分な点を見てみましょう:

  1. グラフはウィンドウ サイズに応じて自動的に拡大縮小できません。幅は 100% に設定されていますが、グラフは再レンダリングされません。ページが更新されるまで、ユーザー エクスペリエンスが低下します。

  2. Charts は現在、自動データ更新を実装できません

次の 2 つのポイントを実装しましょう:

自動スケーリング

Echarts 自体は自動スケーリングをサポートしていませんが、Echarts はサイズ変更メソッドを提供します。

//在init方法中加入下面这行代码
window.addEventListener("resize", this.chart.resize);

この文だけで、チャートをウィンドウ サイズに適応させる必要があることがわかりました。

データの自動更新をサポートします

Echarts はデータ駆動型であるため、データをリセットする限り、それに応じてチャートが再レンダリングされ、これがこの要件を実現するための基礎となります。データの自動更新をサポートしたい場合は、データの変更をリアルタイムで監視し、Echarts にデータをリセットするように指示できるリスナーが必要であることをもう一度想像してみましょう。幸いなことに、Vue には ==watcher== 関数が用意されており、これを使用して上記の関数を簡単に実装できます。

//在Chart.vue中加入watch
 watch: {
  //观察option的变化
  option: {
   handler(newVal, oldVal) {
    if (this.chart) {
     if (newVal) {
      this.chart.setOption(newVal);
     } else {
      this.chart.setOption(oldVal);
     }
    } else {
      this.init();
    }
   },
   deep: true //对象内部属性的监听,关键。
  }
 }

上記のコードは、オプション オブジェクトのプロパティ変更の監視を実装します。オプションのデータが変更されると、チャートが再レンダリングされます。

動的更新を実現する

次のステップは、誰もが知っていると思いますが、バックグラウンドから定期的にデータを取得し、親コンポーネントのオプションを更新することです。ここで考えるべき質問が 2 つあります:

  1. グラフで 1 秒あたり 1 つのデータを追加する必要がある場合、パフォーマンスとユーザー エクスペリエンスのバランスを達成するには、データ リクエストをどのように実行する必要がありますか?

  2. データを動的に更新するコードは親コンポーネントと子コンポーネントのどちらに配置する必要がありますか?

最初の質問については、サーバー データを毎秒リアルタイムで取得することが間違いなく最も正確です。解決策は 2 つあります:

  • 1 秒に 1 回バックグラウンドにリクエストする

  • 長い接続を維持する。バックグラウンドでデータを毎秒フロントエンドにプッシュします

第一种方案无疑对性能和资源产生了极大的浪费;除非实时性要求特别高(股票系统),否则不推荐这种方式;

第二种方案需要使用web Socket,但在服务端需要进行额外的开发工作。

笔者基于项目的实际需求(实时性要求不高,且后台生成数据也有一定的延迟性),采用了以下方案:

  1. 前端每隔一分钟向后台请求一次数据,且为当前时间的上一分钟的数据;

  2. 前端将上述数据每隔一秒向图表set一次数据

关于第二个问题:笔者更倾向于将Chart组件设计成纯组件,即只接收父组件传递的数据进行变化,不在内部进行复杂操作;这也符合目前前端MVVM框架的最佳实践;而且若将数据传递到Chart组件内部再进行处理,一是遇到不需要动态渲染的需求还需要对组件进行额外处理,二是要在Chart内部做ajax操作,这样就导致Chart完全没有了可复用性。

接下来我们修改App.vue

<template>
 <p>
  <chart></chart>
 </p>
</template>
<script>
import vueEcharts from "./components/vueEcharts";
export default {
 name: "App",
 data() {
  return {
   //笔者使用了mock数据代表从服务器获取的数据
   chartData: {
    xData: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
    sData: [5, 20, 36, 10, 10, 70]
   }
  };
 },
 components: {
  Chart
 },
 mounted() {
  this.refreshData();
 },
 methods: {
  //添加refreshData方法进行自动设置数据
  refreshData() {
   //横轴数据
   let xData = this.chartData.xData,
    //系列值
     sData = this.chartData.sData;
   for (let i = 0; i < xData.length; i++) {
    //此处使用let是关键,也可以使用闭包。原理不再赘述
      setTimeout(() => {
     this.option.xAxis.data.push(xData[i]);
     this.option.series[0].data.push(sData[i]);
    }, 1000*i)//此处要理解为什么是1000*i
   }
  }
 }
};
</script>

至此我们就实现了图表动态数据加载,效果如下图:

 

总结

这篇教程通过一个动态图表的开发,传递了以下信息:

  • Echarts如何与Vue结合使用

  • Vue组件开发、纯组件与“脏”组件的区别

  • Vue watch的用法

  • let的特性

  • JavaScript EventLoop特性

大家可以根据这个列表查漏补缺。

后续优化

  1. 这个组件还有需要需要优化的点,比如:

  2. 间隔时间应该可配置

  3. 每分钟从后台获取数据,那么图表展示的数据将会越来越多,越来越密集,浏览器负担越来越大,直到崩溃

  4. 没有设置暂停图表刷新的按钮

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

JS怎么储存原始值与引用值

Angular Component实用技巧详解

以上がVue を使用して Echarts コンポーネントを動的に更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
ECharts和Java接口:如何实现统计图表数据导出与分享ECharts和Java接口:如何实现统计图表数据导出与分享Dec 17, 2023 am 08:44 AM

ECharts是一款功能强大、灵活可定制的开源图表库,可用于数据可视化和大屏展示。在大数据时代,统计图表的数据导出和分享功能变得越来越重要。本文将介绍如何通过Java接口实现ECharts的统计图表数据导出和分享功能,并提供具体的代码示例。一、ECharts简介ECharts是百度开源的一款基于JavaScript和Canvas的数据可视化库,具有丰富的图表

使用PHP和ECharts创建可视化图表和报表使用PHP和ECharts创建可视化图表和报表May 10, 2023 pm 10:21 PM

随着大数据时代的来临,数据可视化成为企业决策的重要工具。千奇百怪的数据可视化工具层出不穷,其中ECharts以其强大的功能和良好的用户体验受到了广泛的关注和应用。而PHP作为一种主流的服务器端语言,也提供了丰富的数据处理和图表展示功能。本文将介绍如何使用PHP和ECharts创建可视化图表和报表。ECharts简介ECharts是一个开源的可视化图表库,它由

ECharts入门指南:如何使用EChartsECharts入门指南:如何使用EChartsDec 17, 2023 am 09:26 AM

ECharts入门指南:如何使用ECharts,需要具体代码示例ECharts是一款基于JavaScript的数据可视化库,通过使用ECharts,用户可以轻松地展示各种各样的图表,如折线图、柱状图、饼图等等。本文将为您介绍如何使用ECharts,并提供详细的代码示例。安装ECharts要使用ECharts,您首先需要安装它。您可以从ECharts官网htt

vue3怎么封装ECharts组件vue3怎么封装ECharts组件May 20, 2023 pm 03:22 PM

一、前言前端开发需要经常使用ECharts图表渲染数据信息,在一个项目中我们经常需要使用多个图表,选择封装ECharts组件复用的方式可以减少代码量,增加开发效率。二、封装ECharts组件为什么要封装组件避免重复的工作量,提升复用性使代码逻辑更加清晰,方便项目的后期维护封装组件可以让使用者不去关心组件的内部实现以及原理,能够使一个团队更好的有层次的去运行封装的ECharts组件实现了以下的功能:使用组件传递ECharts中的option属性手动/自动设置chart尺寸chart自适应宽高动态展

利用ECharts和Python接口生成漏斗图的步骤利用ECharts和Python接口生成漏斗图的步骤Dec 17, 2023 am 10:08 AM

利用ECharts和Python接口生成漏斗图的步骤,需要具体代码示例漏斗图是一种常用的数据可视化工具,可以用于展示数据在不同阶段之间的变化情况。利用ECharts和Python接口,我们可以轻松地生成漂亮的漏斗图。下面,将按照以下步骤介绍如何实现漏斗图的生成,并给出具体的代码示例。步骤一:安装ECharts和Python接口首先,我们需要安装ECharts

如何在Python中使用ECharts绘制堆叠柱状图如何在Python中使用ECharts绘制堆叠柱状图Dec 17, 2023 am 09:48 AM

在数据可视化领域,堆叠柱状图是一种常见的可视化方式。它将多个数据系列绘制成一个条形,每个条形由多个子项组成,每个子项对应一个数据系列,在同一坐标系下进行展示。这种图表可以用于比较不同类别或数据系列的总大小、每个类别或数据系列的组成比例等。在Python中,我们可以使用ECharts库来绘制堆叠柱状图,而且该库具有丰富的可定制性和交互性。一、安装和导入ECha

ECharts漏斗图:如何展示数据转化率ECharts漏斗图:如何展示数据转化率Dec 17, 2023 am 08:32 AM

ECharts漏斗图:如何展示数据转化率,需要具体代码示例导语:在数据可视化领域,漏斗图是一种非常常用的图表类型,它能够直观地展示数据的转化过程与转化率。ECharts作为一个强大的数据可视化工具,也提供了漏斗图的绘制功能。本文将结合具体的代码示例,详细介绍ECharts漏斗图的绘制方法以及如何展示数据的转化率。漏斗图的基本结构漏斗图由上至下呈现不同的阶段,

如何在ECharts中使用桑基图展示数据流向如何在ECharts中使用桑基图展示数据流向Dec 17, 2023 am 09:38 AM

如何在ECharts中使用桑基图展示数据流向引言:数据可视化是数据分析中的重要环节,能够将复杂的数据通过图表等方式直观地展示出来。ECharts是一个功能强大的数据可视化库,支持多种图表类型,其中桑基图(SankeyDiagram)能够非常直观地展示数据的流向关系。本文将介绍如何在ECharts中使用桑基图展示数据流向,并提供具体的代码示例。引入EChar

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、