Heim > Web-Frontend > View.js > Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung

Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung

青灯夜游
Freigeben: 2022-03-10 19:48:37
nach vorne
3178 Leute haben es durchsucht

Wie kapselt das

vue-Projekt Echarts elegant ein? Der folgende Artikel stellt Ihnen eine elegantere Möglichkeit vor, Echarts im Vue-Projekt zu kapseln. Ich hoffe, er wird Ihnen hilfreich sein!

Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung

Szenarien

  • 1. Wenn Sie Echarts verwenden, müssen Sie eine Reihe von Optionen schreiben. Wenn Sie für jedes Diagramm eine schreiben müssen, ist die Menge an Code in einer Datei sehr groß
  • 2. Unbequeme Wiederverwendung

Anforderungen

  • 1. Bei Anzeigediagrammen werden die Daten einfach von den Daten übertragen
  • 3 Das Projekt? , Automatischen Import mit weniger Code realisieren, keine Notwendigkeit, einzeln zu importieren
  • 4. Meine Diagramme werden häufig in der Datenvisualisierung auf großen Bildschirmen verwendet, und die proportionale Skalierungsmethode wird verwendet, sodass die Diagramme dies auch können automatisch entsprechend der Schnittstellenskalierung skaliert werden, kein manueller Aufruf erforderlich. [Verwandte Empfehlungen: vuejs-Video-Tutorial
  • ]
  • 5. Diagramme sind konfigurierbar
  • Codeübersicht
Die beteiligten Dateien sind wie folgt (spezifische Referenz

Code

):

|-- src
    |-- components
        |-- chart
            |-- index.vue    // 图表单文件组件,供界面调用
            |-- index.js    // 实现自动化导入options里的图表option
            |-- options    // 存放各种图表的option
                |-- bar    // 随便一例子
                    |-- index.js
    |-- views
        |-- chartTest    // 实例所在
            |-- index.vue
            |-- index.scss
            |-- index.js
|-- main.js    // 全局引入echarts图表
Nach dem Login kopieren
Implementierung

Komponenten--Diagramm-- index. vue

Here definiert eine Komponente namens ChartView, die 4 konfigurierbare Eigenschaften öffnet: width width, height height, ob Automatische Größenänderung autoResize (Standard ist), Diagrammkonfiguration chartOption.

Standardmäßig wird Canvas zum Rendern von Diagrammen verwendet. Sie können auch SVG verwenden.

ChartView 的组件,开放了4个可配置的属性:宽度width,高度height, 是否自动调整大小autoResize(默认是), 图表的配置chartOption

这里默认用Canvas 渲染图表了,也可以用SVG的,自选吧

具体代码如下

<template>
  <div class="chart">
    <div ref="chart" :style="{ height: height, width: width }" />
  </div>
</template>
<script>

// 引入 echarts 核心模块,核心模块提供了 echarts 使用必须要的接口。
import * as echarts from &#39;echarts/core&#39;
// 引入柱状图图表,图表后缀都为 Chart
import {
  BarChart
} from &#39;echarts/charts&#39;
// 引入提示框,标题,直角坐标系组件,组件后缀都为 Component
import {
  TitleComponent,
  TooltipComponent,
  GridComponent
} from &#39;echarts/components&#39;
// 引入 Canvas 渲染器,注意引入 CanvasRenderer 或者 SVGRenderer 是必须的一步
import {
  CanvasRenderer
} from &#39;echarts/renderers&#39;

// 注册必须的组件
echarts.use(
  [TitleComponent, TooltipComponent, GridComponent, BarChart, CanvasRenderer]
)

export default {
  name: &#39;ChartView&#39;,
  props: {
    width: {
      type: String,
      default: &#39;100%&#39;
    },
    height: {
      type: String,
      default: &#39;350px&#39;
    },
    autoResize: {
      type: Boolean,
      default: true
    },
    chartOption: {
      type: Object,
      required: true
    },
    type: {
      type: String,
      default: &#39;canvas&#39;
    }
  },
  data() {
    return {
      chart: null
    }
  },
  watch: {
    chartOption: {
      deep: true,
      handler(newVal) {
        this.setOptions(newVal)
      }
    }
  },
  mounted() {
    this.initChart()
    if (this.autoResize) {
      window.addEventListener(&#39;resize&#39;, this.resizeHandler)
    }
  },
  beforeDestroy() {
    if (!this.chart) {
      return
    }
    if (this.autoResize) {
      window.removeEventListener(&#39;resize&#39;, this.resizeHandler)
    }
    this.chart.dispose()
    this.chart = null
  },
  methods: {
    resizeHandler() {
      this.chart.resize()
    },
    initChart() {
      this.chart = echarts.init(this.$refs.chart, &#39;&#39;, {
        renderer: this.type
      })
      this.chart.setOption(this.chartOption)
      this.chart.on(&#39;click&#39;, this.handleClick)
    },
    handleClick(params) {
      this.$emit(&#39;click&#39;, params)
    },
    setOptions(option) {
      this.clearChart()
      this.resizeHandler()
      if (this.chart) {
        this.chart.setOption(option)
      }
    },
    refresh() {
      this.setOptions(this.chartOption)
    },
    clearChart() {
      this.chart && this.chart.clear()
    }
  }
}
</script>
Nach dem Login kopieren

components--chart--index.js

这里主要利用require.context,把options里面定义的图表遍历导入,这样就不需要在代码里一个个import了,特别是图表多的时候。

const modulesFiles = require.context(&#39;./options&#39;, true, /index.js$/)
let modules = {}
modulesFiles.keys().forEach(item => {
  modules = Object.assign({}, modules, modulesFiles(item).default)
})
export default modules
Nach dem Login kopieren

components--chart--options

这里展示下如何封装自己想要的图表

Echarts官方示例(https://echarts.apache.org/examples/zh/index.html)上随便选了个示例

Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung

options下新建一个bar目录,bar目录下新建一个index.js文件。(个人习惯而已,喜欢每个图表都独立文件夹存放。不喜欢这种方式的,可以不放目录,直接js文件,但是components--chart--index.js要对应修改下)

直接复制示例的option代码

index.js具体代码如下

const testBar = (data) => {
  const defaultConfig = {
    xAxis: {
      type: &#39;category&#39;,
      data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;]
    },
    yAxis: {
      type: &#39;value&#39;
    },
    series: [{
      data: [120, 200, 150, 80, 70, 110, 130],
      type: &#39;bar&#39;
    }]
  }

  const opt = Object.assign({}, defaultConfig)
  return opt
}

export default {
  testBar
}
Nach dem Login kopieren

testBar方法是可以传参的,具体使用的时候,图表所需要配置的属性,如:data数据、图表颜色......等都可以作为参数传。

main.js

这里全局引入下封装的Echarts组件,方便界面调用。(至于单个引用的方式,就不必多说了)

具体代码如下:

import eChartFn from &#39;@/components/chart/index.js&#39;
import ChartPanel from &#39;@/components/chart/index.vue&#39;
Vue.component(ChartPanel.name, ChartPanel)
Vue.prototype.$eChartFn = eChartFn
Nach dem Login kopieren

chartTest

这里展示下如何调用封装的bar图表,主要代码如下

index.vue

<chart-view class="chart-content" :chart-option="chartOpt" :auto-resize="true" height="100%" />
Nach dem Login kopieren

index.js

export default {
  name: &#39;chartTestView&#39;,
  data() {
    return {
      chartOpt: {}
    }
  },
  mounted() {},
  created() {
    this.chartOpt = this.$eChartFn.testBar()
  },
  methods: {
  },
  watch: {}
}
Nach dem Login kopieren

效果如下

Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung

可以尝试拖动浏览器的大小,可以看到,图表也是随着浏览器的拖动自动缩放的。

代码

代码总览的目录去代码里找着看就行了。

  • https://github.com/liyoro/vue-skill

总结

Echarts用到的各种图表,基本上都可以在Echarts官方示例Echarts可视化作品分享上找到,特别是Echarts可视化作品分享,做项目的时候,可以去参考。

以上,封装了chart组件,按照上述方式,把图表的option配置和相关处理都放options文件夹下面,调用图表时传对应的option,也就几行代码的事情,算是比较方便了。

chartDer spezifische Code lautet wie folgt:

|-- src
    |-- components
        |-- chart
            |-- options    // 存放各种图表的option
                |-- pie    // pie例子
                    |-- index.js
    |-- views
        |-- chartTest    // 实例所在
            |-- index.vue
            |-- index.scss
            |-- index.js
Nach dem Login kopieren
Nach dem Login kopieren

components--chart--index.js🎜🎜Hier verwenden wir hauptsächlich require.context, um die in options definierten Diagramme zu durchlaufen und zu importieren. sodass insbesondere bei vielen Diagrammen kein import hinzugefügt werden muss. 🎜
this.chartOpt2 = this.$eChartFn.getPieChart([100, 23, 43, 65], [&#39;#36CBCB&#39;, &#39;#FAD337&#39;, &#39;#F2637B&#39;, &#39;#975FE4&#39;])
Nach dem Login kopieren
Nach dem Login kopieren

components--chart--options🎜🎜Hier zeige ich Ihnen, wie Sie das gewünschte Diagramm kapseln können🎜🎜Im offiziellen 🎜Echarts-Beispiel🎜 (https://echarts. apache.org/examples/zh/index.html) 🎜🎜Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung🎜🎜Erstellen Sie ein neues Verzeichnis bar unter options und ein neues Verzeichnis bar unter code>index .js-Datei. (Es ist nur eine persönliche Angewohnheit. Ich mag es, wenn jedes Diagramm in einem separaten Ordner gespeichert wird. Wenn Ihnen diese Methode nicht gefällt, können Sie das Verzeichnis verlassen und direkt die js-Datei verwenden, aber components--chart-- index.js muss übereinstimmen (Geändert)🎜🎜Kopieren Sie direkt den option-Code des Beispiels🎜🎜index.jsDer spezifische Code lautet wie folgt🎜
<chart-view class="chart-content" :chart-option="chartOpt2" :auto-resize="true" :play-highlight="true"    style="max-width:90%" />
Nach dem Login kopieren
Nach dem Login kopieren
🎜Der Die testBar-Methode kann Parameter übergeben. Bei spezifischer Verwendung können die Attribute, die für das Diagramm konfiguriert werden müssen, wie z. B. Daten, Diagrammfarbe usw., als Parameter übergeben werden. 🎜

main.js🎜🎜Die gekapselte Echarts-Komponente wird hier global eingeführt, um Schnittstellenaufrufe zu erleichtern. (Bezüglich der Einzelreferenzmethode muss nicht mehr gesagt werden) 🎜🎜Der spezifische Code lautet wie folgt: 🎜
|-- src
    |-- components
        |-- chart
            |-- index.js    // 实现自动化导入options里的图表option
Nach dem Login kopieren
Nach dem Login kopieren

chartTest🎜🎜Hier erfahren Sie, wie das gekapselte < aufgerufen wird code>barDiagramm, der Hauptcode lautet wie folgt🎜

index.vue

rrreee

index. js

rrreee🎜Der Effekt ist wie folgt 🎜🎜Wie kapselt das Vue-Projekt Echarts elegant? Methodeneinführung🎜🎜Ja Versuchen Sie, die Größe des Browsers zu verschieben. Sie können sehen, dass das Diagramm beim Ziehen des Browsers automatisch skaliert wird. 🎜

Code🎜🎜Klicken Sie auf das Verzeichnis Codeübersicht und gehen Sie zu 🎜Code🎜, um danach zu suchen. 🎜

Verwandte Etiketten:
Quelle:juejin.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage