在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 相关文章推荐
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
Jul 11 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
Apr 02 Javascript
JS动态获取当前时间,并写到特定的区域
May 03 Javascript
JavaScript实现对下拉列表值进行排序的方法
Jul 15 Javascript
jQuery基本选择器之标签名选择器
Sep 03 Javascript
原生js实现节日时间倒计时功能
Jan 18 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
浅谈layui分页控件field参数接收对象的问题
Sep 20 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获取客户端及服务器端IP的封装类
2016/07/21 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP实现获取文件mime类型多种方法解析
2020/05/28 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
python如何为被装饰的函数保留元数据
2018/03/21 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
html5 web本地存储将取代我们的cookie
2012/12/26 HTML / CSS
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
生物技术专业研究生自荐信
2013/09/22 职场文书
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
运动会广播稿30字
2014/01/21 职场文书
商场中秋节活动方案
2014/02/07 职场文书
人力资源主管职责范本
2014/03/05 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
植树节新闻稿
2015/07/17 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle