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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
var与Javascript变量隐式声明
Sep 17 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
JQuery $.each遍历JavaScript数组对象实例
Sep 01 Javascript
jQuery对JSON数据进行排序输出的方法
Jun 24 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
Jul 01 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
js中利用cookie实现记住密码功能
Aug 20 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 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
对PHP PDO的一些认识小结
2015/01/23 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
PHP jQuery+Ajax结合写批量删除功能
2017/05/19 PHP
Laravel 加载第三方类库的方法
2018/04/20 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
JavaScript面向对象编程
2008/03/02 Javascript
jquery.ui.draggable中文文档
2009/11/24 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
angularjs创建弹出框实现拖动效果
2020/08/25 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python解析xml文件实例分析
2015/05/27 Python
python获取当前用户的主目录路径方法(推荐)
2017/01/12 Python
详解python多线程之间的同步(一)
2019/04/03 Python
Python实现12306火车票抢票系统
2019/07/04 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
什么是反射
2012/03/17 面试题
师范毕业生自荐信
2013/10/17 职场文书
新课培训心得体会
2014/09/03 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang