在Vue项目中使用d3.js的实例代码


Posted in Javascript onMay 01, 2018

之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.js的方法,npm 上面的D3相对来说 可以说是很不人性化了 完全没有说 在webpack上怎么使用D3.js

最后折腾很久 看到某位外国大佬 看他的案例 成功的实现了在Vue项目里面实现D3的使用

首先安装

npm install d3 --save-dev

以防万一,然后看package.json

在Vue项目中使用d3.js的实例代码

安装完成

在我们开始之前,让我们渲染一个Vue组件,它使用常规的D3 DOM操作呈现一个简单的折线图:

<script>
import * as d3 from 'd3';
const data = [99, 71, 78, 25, 36, 92];
export default {
 name: 'non-vue-line-chart',
 template: '<div></div>',
 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>

代码简单易懂,但这仅仅是一个基本的例子。因为我们没有使用模板,所以需要更多操作和计算的更复杂的可视化会掩盖组件的设计和逻辑。上述方法的另一个警告是,我们不能使用scopedCSS 的属性,因为D3会动态地向DOM添加元素。

在Vue项目中使用d3.js的实例代码

可以使用比较奇怪,但是代码比较优雅的方式去实现

<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>

非常酷,即使它没有公开任何属性并且数据是硬编码的,它很好地将视图从逻辑中分离出来,并且使用Vue钩子,方法和data对象,现象和上图一样的。

总结

以上所述是小编给大家介绍的在Vue项目中使用d3.js的实例代码,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
Oct 20 Javascript
Vue表单验证插件的制作过程
Apr 01 Javascript
简单实现js点击展开二级菜单功能
May 16 Javascript
详解webpack解惑:require的五种用法
Jun 09 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
vue使用Font Awesome的方法步骤
Feb 26 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
详解Jest结合Vue-test-utils使用的初步实践
Jun 27 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
jQuery实现的分页插件完整示例
May 26 jQuery
JavaScript实例 ODO List分析
Jan 22 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 #Javascript
妙用缓存调用链实现JS方法的重载
Apr 30 #Javascript
JS实现的缓冲运动效果示例
Apr 30 #Javascript
Vue波纹按钮组件制作
Apr 30 #Javascript
学习JS中的DOM节点以及操作
Apr 30 #Javascript
WebSocket的通信过程与实现方法详解
Apr 29 #Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 #jQuery
You might like
PHPShop存在多个安全漏洞
2006/10/09 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
jQuery实现可以控制图片旋转角度效果(附demo源码下载)
2016/01/27 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
2020/07/13 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
Python操作Access数据库基本步骤分析
2016/09/19 Python
Python中音频处理库pydub的使用教程
2017/06/07 Python
Python matplotlib绘图可视化知识点整理(小结)
2018/03/16 Python
python list转矩阵的实例讲解
2018/08/04 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
Python模块的制作方法实例分析
2019/12/21 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
vue+django实现下载文件的示例
2021/03/24 Vue.js
冰淇淋店创业计划书范文
2013/12/27 职场文书
吸烟检讨书2000字
2014/02/13 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
超市收银员岗位职责
2015/04/07 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL