在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 相关文章推荐
一个判断抢购时间是否到达的简单的js函数
Jun 23 Javascript
引用其它js时如何同时处理多个window.onload事件
Sep 02 Javascript
jquery制作多功能轮播图插件
Apr 02 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
js判断手机端(Android手机还是iPhone手机)
Jul 22 Javascript
jquery实现图片水平滚动效果代码分享
Aug 26 Javascript
JS实现的表格行鼠标点击高亮效果代码
Nov 27 Javascript
jquery实现全屏滚动
Dec 28 Javascript
js中常用的Math方法总结
Jan 12 Javascript
最基础的vue.js双向绑定操作
Aug 23 Javascript
详解Vue Elememt-UI构建管理后台
Feb 27 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 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图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
Aster vs Newbee BO3 第二场2.18
2021/03/10 DOTA
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
AngularJS学习第一篇 AngularJS基础知识
2017/02/13 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
Python实现将xml导入至excel
2015/11/20 Python
python设计模式大全
2016/06/27 Python
Python实现的计算器功能示例
2018/04/26 Python
分享vim python缩进等一些配置
2018/07/02 Python
pytorch permute维度转换方法
2018/12/14 Python
Python如何实现强制数据类型转换
2019/11/22 Python
windows支持哪个版本的python
2020/07/03 Python
python制作抽奖程序代码详解
2021/01/15 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
优秀高中生事迹材料
2014/02/11 职场文书
生产助理岗位职责
2014/06/18 职场文书
网络技术专业求职信
2014/07/13 职场文书
总经理检讨书
2014/09/15 职场文书
党员批评与自我批评
2014/10/15 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
2015入党个人自传范文
2015/06/26 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书