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 相关文章推荐
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
javascript开发技术大全 第4章 直接量与字符集
Jul 03 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 Javascript
jQuery图片轮播实现并封装(一)
Dec 03 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
用Vue.extend构建消息提示组件的方法实例
Aug 08 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
Three.js实现绘制字体模型示例代码
Sep 26 Javascript
React props和state属性的具体使用方法
Apr 12 Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
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
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
JavaScript动态加载重复绑定问题
2018/04/01 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
django js 实现表格动态标序号的实例代码
2019/07/12 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
Python利用字典破解WIFI密码的方法
2019/02/27 Python
python hough变换检测直线的实现方法
2019/07/12 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
介绍下static、final、abstract区别
2015/01/30 面试题
宪法宣传周工作方案
2014/05/26 职场文书
销售经理工作检讨书
2015/02/19 职场文书
家长通知书家长意见
2015/06/03 职场文书
刘胡兰观后感
2015/06/16 职场文书
感恩教师节主题班会
2015/08/12 职场文书
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers