vue中打印显示++的问题解决方案(做成类似同步的操作就行了)
这个问题,困扰我很久很久

怎么实现的呢?首先进入页面就开始调取打印接口,打印接口的成功回调函数里面写
this.hasOut++(这是实时显示的数量)
this.width=(this.hasOut/this.totalNumber)*100+ '%'(这是进度条的宽度) 然后去写watch 监听这个数量的变化(这个hasOut实在data中什么了的)
watch: {
hasOut(val) {
if(val<localStorage.getItem('buyNumber')){
this.$nextTick(() => {
this.testPrint(val)//这是打印函数
});
}else {
//跳转到首页(打印完之后)
this.$router.push({
name:'index',
})
}
}
但是上面这么写,不能实现打印的票数实时变化,直到打印完了之后,页面才会显示已打印 10张(假如买了10张)
这个怎么办呢?
直接来核心代码,加入了setTimeOut
if(bb==0||bb==8){
// 0 8 代表打印成功
setTimeout(()=>{
this.hasOut++
this.width=(this.hasOut/this.totalNumber)*100+ '%'
},0)
}
watch也要写 不然hasOut变化太快,有时候就不会实时变化,它会跳过 比如打印1张直接跳转到3张中间的2没显示
watch: {
hasOut(val) {
if(val<localStorage.getItem('buyNumber')){
setTimeout(()=>{
this.$nextTick(() => {
this.testPrint(val)
});
},0)
}else {
//这里也写timeout是因为 不写的话 比如你买10张,它只会显示已打印9张,进度条也是90% 然后就直接跳首页了
setTimeout(()=>{
this.$router.push({
name:'index',
})
},1500)
}
}
},
综上所述,小知识--》就是你setTimeout设置为0,其实不起作用,因为浏览器js执行有个最小时间间隔,每个浏览器不通,一般都是15毫秒左右,有低的也有高的,差不多就这个值。
理一下思路,进入页面--》打印接口--》成功--》setTimeout--》0秒后(其实是15毫秒后,不通浏览器时间间隔不通)数量++--》watch监听到数量变化--》0秒(15ms)后,调取打印接口--》循环。
说白了就相当于同步了;任务队列显示打印成功回调的setTimeout,这个++执行后,watch监听到小于buyNumber,然后setTimeout 调取打印接口,然后循环,为啥watch中要写setTimeout呢,因为任务队列啊,写了就会去排队,不写的话,它就有可能插队,写了就能保证这个任务队列是处于同步的状态啊-------》哈哈哈哈哈这么写你理解了涩
JavaScript引擎是单线程运行的,浏览器无论在什么时候都只且只有一个线程在运行JavaScript程序.浏览器内核实现允许多个线程异步执行,这些线程在内核制控下相互配合以保持同步
如果队列非空,引擎就从队列头取出一个任务,直到该任务处理完,即返回后引擎接着运行下一个任务,在任务没返回前队列中的其它任务是没法被执行的.
vue中打印显示++的问题解决方案(做成类似同步的操作就行了)的更多相关文章
- 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据
前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...
- AndroidListview 滑动过程中图片显示重复错乱解决方案
主要分析Android中Listview滚动过程造成的图片显示重复.错乱.闪烁的原因及解决方法,顺便跟进Listview的缓存机制. 1.原因分析 Listview item 缓存机制:为了使得性能更 ...
- PHP中json_encode后,在json字符串中依然显示中文的解决方案
<?php header("Content-Type:text/html;charset=utf-8;"); $arr = array ('Version_code'=> ...
- vue中eslint报错的解决方案
1,Newline required at end of file but not found. (eol-last) //文末需要一行 这个是报错: 这个是不报错的: 只需要在最后一行加上一空行即可 ...
- 在vue中选中某个标签,并且对其属性进行操作
第一步:在标签中添加ref="111"属性 第二步:this.$refs.111.属性="" 此步骤是一111为标记选中了要操作的标签,通过点属性的方法,进 ...
- 当Vue中img的src是动态渲染时不显示问题
最近遇见动态渲染img时,想起了当初刚开始写vue时,曾经遇见的一个小小坑. Vue中:img的src属性是动态渲染时不显示问题1.需求:展示用户头像,数据从后台获取,如果没有拿到则显示默认图片. 如 ...
- vue中使用vue-pdf插件显示pdf
最近项目需求需要在vue中展示pdf,上网搜索了实现方法,找到vue-pdf这个插件非常好用,并且还有许多方法.属性能进行功能扩展. 一.安装 npm install --save vue-pdf 二 ...
- mvc 分部视图(Partial)显示登陆前后变化以及Shared文件夹在解决方案资源管理器中没有显示的问题
刚开始我的解决方案资源管理器中没有显示Shared文件夹,但Shared文件夹在项目中是实际存在的,我搜了下好像没有类似的解答(可能是我搜索的关键词不够准确).后来自己看了下vs2012. 其实解决方 ...
- vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案
现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...
随机推荐
- 在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)
这是我们在实际ASP.NET Core项目中用到的,验证用户名中是否包含空格. 开始是这么实现的(继承ValidationAttribute,重写IsValid方法): public class No ...
- java小tip
//20181128 ·javaJDK源码在c盘java安装目录里jdk文件夹src.zip压缩包里 ·HashCode()返回的数可能是负数 ·内部类的优点:可以方便调用所在类的方法 ·接口中定义常 ...
- debootstrap 配置
在主机sudo su 切换到root mount proc jessie/proc -t proc mount sysfs jessie/sys -t sysfs chroot jessie /bin ...
- day0321 生成器
一.生成器 1.迭代器: 1.1.调用方法直接返回 1.2.可迭代对象通过执行iter方法得到 迭代器的优势:节省内存. 2.生成器:有些情况我们也需要也需要节省空间,只能是自己写来实现迭代器的功能就 ...
- elastic客户端TransportClient的使用
关于TransportClient,elastic计划在Elasticsearch 7.0中弃用TransportClient,并在8.0中完全删除它.后面,应该使用Java高级REST客户端,它执行 ...
- activeMQ的安装和使用
什么是ActiveMQ? 一款开源的JMS具体实现,是一个易于使用的消息中间件,一个消息容器 安装 下载 官方网站:http://activemq.apache.org/ 解压 linux下的安装,解 ...
- 【PyQt5-Qt Designer】简易的数字键盘输入+简易计算器
参考如下键盘格式写了一个键盘输入,目前还不能进行运算,后期完善... 效果如下: 完整代码: from PyQt5.QtWidgets import (QApplication,QWidget,QPu ...
- python-面向对象-06_私有属性和私有方法
私有属性和私有方法 01. 应用场景及定义方式 应用场景 在实际开发中,对象 的 某些属性或方法 可能只希望 在对象的内部被使用,而 不希望在外部被访问到 私有属性 就是 对象 不希望公开的 属性 私 ...
- (1.7)mysql profiles分析
mysql profiles分析 作用:记录会话查询SQL所用时间 1.开启 2.使用 [2.1]先使用一个查询 [2.2]然后再运行 show profiles; [2.3]查看执行过程中每个状态和 ...
- 微信小程序首支视频广告片发布
自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...