Maison  >  Article  >  interface Web  >  Explication détaillée des cas utilisant d3.js dans les projets Vue

Explication détaillée des cas utilisant d3.js dans les projets Vue

php中世界最好的语言
php中世界最好的语言original
2018-05-14 14:23:073660parcourir

Cette fois, je vais vous apporter une explication détaillée du cas d'utilisation de d3.js dans le projet Vue Quelles sont les précautions pour l'utilisation de d3.js dans le projet Vue. cas, jetons un coup d'oeil.

J'ai déjà écrit une démo et certaines choses nécessitaient d'utiliser d3 pour obtenir certains effets. Cependant, j'ai recherché des ressources dans de nombreux forums et je n'ai pas trouvé de moyen d'utiliser D3.js dans Vue. D3 sur npm peut être considéré comme relativement C'est très inhumain et je n'ai pas du tout mentionné comment utiliser D3.js sur webpack

Enfin, après avoir longtemps lutté, j'ai vu un patron étranger lire son cas et implémenté avec succès l'utilisation de D3 dans le projet Vue

Firstinstall

npm install d3 --save-dev

juste au cas où, puis regardez package.json

Installation terminée

Avant de commencer, rendons un composant Vue qui utilise les opérations DOM D3 régulières pour restituer un simple graphique linéaire :

<script>
import * as d3 from 'd3';
const data = [99, 71, 78, 25, 36, 92];
export default {
 name: 'non-vue-line-chart',
 template: '<p></p>',
 mounted() {
  const svg = d3.select(this.$el)
   .append('svg')
   .attr('width', 500)
   .attr('height', 270)
   .append('g')
   .attr('transform', 'translate(0, 10)');
  const x = d3.scaleLinear().range([0, 430]);
  const y = d3.scaleLinear().range([210, 0]);
  d3.axisLeft().scale(x);
  d3.axisTop().scale(y);
  x.domain(d3.extent(data, (d, i) => i));
  y.domain([0, d3.max(data, d => d)]);
  const createPath = d3.line()
   .x((d, i) => x(i))
   .y(d => y(d));
  svg.append('path').attr('d', createPath(data));
 },
};
</script>
<style lang="sass">
svg
 margin: 25px;
 path
  fill: none
  stroke: #76BF8A
  stroke-width: 3px
</style>

Le code est simple et facile à comprendre, mais ce n'est qu'un exemple de base. Comme nous n'utilisons pas de modèles, des visualisations plus complexes nécessitant davantage d'opérations et de calculs obscurciraient la conception et la logique du composant. Une autre mise en garde concernant l'approche ci-dessus est que nous ne pouvons pas utiliser la propriété scopedCSS car D3 ajoute dynamiquement des éléments au DOM.

peut être utilisé d'une manière étrange, mais élégante en termes de code, pour implémenter

<template>
 <svg width="500" height="270">
  <g style="transform: translate(0, 10px)">
   <path :d="line" />
  </g>
 </svg>
</template>
<script>
import * as d3 from 'd3';
export default {
 name: 'vue-line-chart',
 data() {
  return {
   data: [99, 71, 78, 25, 36, 92],
   line: '',
  };
 },
 mounted() {
  this.calculatePath();
 },
 methods: {
  getScales() {
   const x = d3.scaleTime().range([0, 430]);
   const y = d3.scaleLinear().range([210, 0]);
   d3.axisLeft().scale(x);
   d3.axisBottom().scale(y);
   x.domain(d3.extent(this.data, (d, i) => i));
   y.domain([0, d3.max(this.data, d => d)]);
   return { x, y };
  },
  calculatePath() {
   const scale = this.getScales();
   const path = d3.line()
    .x((d, i) => scale.x(i))
    .y(d => scale.y(d));
   this.line = path(this.data);
  },
 },
};
</script>
<style lang="sass" scoped>
svg
 margin: 25px;
path
 fill: none
 stroke: #76BF8A
 stroke-width: 3px
</style>

ce qui est plutôt cool même s'il n'expose aucun les propriétés et les données sont codées en dur, il sépare très bien la vue de la logique et utilise des hooks Vue, des méthodes et des donnéesobjets, le phénomène est le même que l'image ci-dessus.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Un résumé de la façon d'utiliser le module de journal nodejs winston

Un résumé de la façon d'utiliser watch dans Vue

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn