在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 相关文章推荐
Javascript 中 null、NaN和undefined的区别总结
Apr 10 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
jquery插件jquery倒计时插件分享
Dec 27 Javascript
js控制table合并具体实现
Feb 20 Javascript
node.js解决获取图片真实文件类型的问题
Dec 20 Javascript
DOM基础教程之模型中的模型节点
Jan 19 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
Oct 24 Javascript
Vue之mixin全局的用法详解
Aug 22 Javascript
ES6中Promise的使用方法实例总结
Feb 18 Javascript
如何实现小程序与小程序之间的跳转
Nov 04 Javascript
js实现电灯开关效果
Jan 19 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
VOLVO车载收音机
2021/03/02 无线电
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
基于PHP技术开发客服工单系统
2016/01/06 PHP
php实现微信扫码支付
2017/03/26 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
Extjs中使用extend(js继承) 的代码
2012/03/15 Javascript
详解JavaScript正则表达式之RegExp对象
2015/12/13 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
Python操作串口的方法
2015/06/17 Python
十个Python程序员易犯的错误
2015/12/15 Python
python中实现k-means聚类算法详解
2017/11/11 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
信息管理专业推荐信
2013/10/29 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
初三政治教学反思
2014/01/30 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
关于安全演讲稿
2014/05/09 职场文书
党员对照检查材料思想汇报
2014/09/16 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书
死亡赔偿协议书
2015/01/28 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
Python机器学习之基础概述
2021/05/19 Python
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL