在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 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
Jul 04 Javascript
深入理解JS继承和原型链的问题
Dec 17 Javascript
原生js轮播特效
May 18 Javascript
jQuery实现动态添加节点与遍历节点功能示例
Nov 09 jQuery
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
Angular通过指令动态添加组件问题
Jul 09 Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
微信小程序使用wxParse解析html的方法示例
Jan 17 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
php对象工厂类完整示例
2018/08/09 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
PHP代码加密的方法总结
2020/03/13 PHP
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
跟老齐学Python之关于类的初步认识
2014/10/11 Python
Python创建文件和追加文件内容实例
2014/10/21 Python
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
django 2.2和mysql使用的常见问题
2019/07/18 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python使用信号量动态更新配置文件的操作
2020/04/01 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
麦当劳印度网上订餐:McDelivery
2020/03/16 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
会计专业应届生求职信
2013/11/24 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
促销活动总结
2014/04/28 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
青年标兵事迹材料
2014/08/16 职场文书
回复函范文
2015/07/14 职场文书
财务人员入职担保书
2015/09/22 职场文书