在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 相关文章推荐
出现“不能执行已释放的Script代码”错误的原因及解决办法
Aug 29 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
JS 新增Cookie 取cookie值 删除cookie 举例详解
Oct 10 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
AngularJS入门教程之控制器详解
Jul 27 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
使用webpack编译es6代码的方法步骤
Apr 28 Javascript
详解VUE调用本地json的使用方法
May 15 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
Aug 07 Javascript
详解 javascript对象创建模式
Oct 30 Javascript
JS中一些高效的魔法运算符总结
May 06 Javascript
深入理解Vue的数据响应式
May 15 Vue.js
详解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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
AJAX的跨域与JSONP(为文章自动添加短址的功能)
2010/01/17 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
jquery实现拖拽添加元素功能
2020/12/01 jQuery
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
python查找第k小元素代码分享
2013/12/18 Python
python绘图库Matplotlib的安装
2014/07/03 Python
使用python加密自己的密码
2015/08/04 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python GUI编程完整示例
2019/04/04 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
Python中if有多个条件处理方法
2020/02/26 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
十佳大学生村官事迹
2014/01/09 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
《玩具柜台前的孩子》教学反思
2014/02/13 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
大学生就业协议书范本(适用于公司企业)
2014/10/07 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
关于空气污染危害的感想
2015/08/11 职场文书
商务英语邮件开头问候语
2015/11/10 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
详解GaussDB for MySQL性能优化
2021/05/18 MySQL