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的简单九宫格实现代码
Aug 09 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
Nov 30 Javascript
jquery div模态窗口的简单实例
May 28 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
js动态添加的DIV中的onclick事件简单实例
Jul 25 Javascript
JS瀑布流实现方法实例分析
Dec 19 Javascript
jQuery实现键盘回车搜索功能
Jul 25 jQuery
vue项目中vue-i18n和element-ui国际化开发实现过程
Apr 25 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
微信小程序自定义底部弹出框功能
Nov 18 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读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
2014/06/12 PHP
php简单备份与还原MySql的方法
2016/05/09 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
FCK调用方法..
2006/12/21 Javascript
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
基于jquery的获取浏览器窗口大小的代码
2011/03/28 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
vue异步加载高德地图的实现
2018/06/19 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
2020/09/08 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
python的多重继承的理解
2017/08/06 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
python ddt实现数据驱动
2018/03/14 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
python3操作注册表的方法(Url protocol)
2020/02/05 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
教师评优事迹材料
2014/01/10 职场文书
建筑工程质量通病防治方案
2014/06/08 职场文书
竞聘演讲稿开场白
2014/08/25 职场文书
班主任2015新年寄语
2014/12/08 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
复活读书笔记
2015/06/29 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android