vue tab切换,解决echartst图表宽度只有100px的问题


Posted in Javascript onJuly 19, 2020

解决思路:直接将图表的宽高写死,根据实际代码进行改写,提供一个思路

1.将图表放进一个div里面

<div class="echarts">
 <div id="myChart" :style="{width: '100%', height: '150px'}"></div>
</div>

2.定义一个方法,并在mounted视图更新的时候执行

<script>
export default {
 mounted() {
 this.setMyChart();
 },
 methods: {
 setMyChart() {
 // jq写法
 // 获取父元素
 var echarts = $('.echarts');
 // 获取父元素宽高
 var echartsWidth = echarts.outerWidth(true);
 var echartsHeight = echarts.outerHeight(true);
 // 获取图表元素
 var myChart = $('#myChart');
 // 将父元素宽高赋值给图表
 myChart.css('width', myChart);
 myChart.css('height', myChart);
 
 // 原生js写法
 // 获取父元素
 // var echarts = document.querySelector('.echarts');
 // 获取父元素宽高
 // var echartsWidth = getStyle(echarts,'width');
 // var echartsHeight = getStyle(echarts,'height');
 // 获取图表元素
 // var myChart = document.querySelector('#myChart');
 // 将父元素宽高赋值给图表
 // myChart.style.width = echartsWidth;
 // myChart.style.height = echartsHeight;

 // 这是一个封装好的方法,兼容IE,第一个参数,element, 第二个属性,css样式
 // function getStyle(obj, attr) { 
 // if (obj.currentStyle) { 
 // return obj.currentStyle[attr]; 
 // } else { 
 // return document.defaultView.getComputedStyle(obj,null)[attr]; 
 // } 
 // }
 }
 }
};
</script>

3.样式

<style scoped>
.echarts {
 width:300px;
 height:150px;
} 
</style>

如果本篇文章对你有帮助的话,很高兴能够帮助上你。

补充知识:vue项目tab切换echart图表切换宽度缩小和图表内容不正确解决

代码:

布局:

<TabButton :btnValue1="'总数'" :btnValue2="'明细'" @watchFlag="handler"></TabButton>
 <div class="it_content">
 <div class="picture" id="work" ref="work" v-show="flag===false"></div>
 <div class="picture" id="workTotal" ref="workTotal" v-show="flag===true"></div>
 </div>

处理函数:

handler(flag){
 this.flag=flag;
 if(!this.flag){
 this.$nextTick(() => {
    this.drawwork(); // 明细图
   });
 }else{
 this.$nextTick(() => {
    this.drawworkTotal(); // 总数图
   });
 }
 },

1、解决宽度缩小的问题

本来是用vue指令的v-if,但是发现用v-if出现宽度缩小的问题。后来改用v-show。这是因为v-if指令是将Dom元素去除掉位置空间了,v-show是将Dom元素位置空间保留了,但并没有进行渲染。v-show保留所定义的样式,空间位置也被保留,echarts图表的宽高依旧和之前一样,所以不会缩小。

2、图表内容不正确

利用this.$nextTick(() => {})。Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。 $nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM。flag发生变化之后,Dom没有立即更新了,通过 $nextTick 回调函数,执行echarts的绘画。

nextTick的由来:

由于VUE的数据驱动视图更新,是异步的,即修改数据的当下,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。

nextTick的触发时机:

在同一事件循环中的数据变化后,DOM完成更新,立即执行nextTick(callback)内的回调。

结合nextTick的由来,可以推出每个事件循环中,nextTick触发的时机:

同一事件循环中的代码执行完毕 -> DOM 更新 -> nextTick callback触发

应用场景:

需要在视图更新之后,基于新的视图进行操作。

以上这篇vue tab切换,解决echartst图表宽度只有100px的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript的数据类型、字面量、变量介绍
May 23 Javascript
谈谈JavaScript中的函数与闭包
Apr 14 Javascript
window resize和scroll事件的基本优化思路
Apr 29 Javascript
详解javascript传统方法实现异步校验
Jan 22 Javascript
ionic3 懒加载
Aug 16 Javascript
vue项目打包部署到服务器的方法示例
Aug 27 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
Apr 17 Javascript
详解vue 在移动端体验上的优化解决方案
May 20 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
Jul 17 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
vue中echarts图表大小适应窗口大小且不需要刷新案例
Jul 19 #Javascript
完美解决vue 中多个echarts图表自适应的问题
Jul 19 #Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
Jul 19 #Javascript
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 #Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 #Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
Jul 19 #Javascript
JavaScript中reduce()的5个基本用法示例
Jul 19 #Javascript
You might like
PHP使用feof()函数读文件的方法
2014/11/07 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
php实现算术验证码功能
2018/12/05 PHP
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
ES6概念 Symbol.keyFor()方法
2016/12/25 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
学习python (2)
2006/10/31 Python
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
如何基于python操作excel并获取内容
2019/12/24 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
加拿大在线隐形眼镜专家:PerfectLens.ca
2016/11/19 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
.NET程序员的几道面试题
2012/06/01 面试题
财务管理个人自荐书范文
2013/11/24 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
职务聘任书范文
2014/03/29 职场文书
高中学生期末评语
2014/04/25 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
2014年银行员工工作总结
2014/11/12 职场文书
教导主任个人总结
2015/03/03 职场文书
排球赛新闻稿
2015/07/17 职场文书
教师旷工检讨书
2015/08/15 职场文书