在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 prototype原型操作笔记
Dec 07 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
Javascript之Math对象详解
Jun 07 Javascript
Bootstrop实现多级下拉菜单功能
Nov 24 Javascript
微信小程序实战之上拉(分页加载)效果(2)
Apr 17 Javascript
WebSocket实现简单客服聊天系统
May 12 Javascript
vue.js如何更改默认端口号8080为指定端口的方法
Jul 14 Javascript
bootstrap Table的一些小操作
Nov 01 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 Javascript
基于JavaScript实现轮播图效果
Jan 02 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
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
2009/10/11 PHP
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
php实现带读写分离功能的MySQL类完整实例
2016/07/28 PHP
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
浅析Python中的for 循环
2016/06/09 Python
Python标准库使用OrderedDict类的实例讲解
2019/02/14 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
python读写csv文件的方法
2019/08/13 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python修改DBF文件指定列
2020/12/19 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
软件测试题目
2013/02/27 面试题
优秀教师感人事迹材料
2014/05/04 职场文书
求职信模板
2014/05/23 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
教你怎么用Python监控愉客行车程
2021/04/29 Python
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers