在vue中封装的弹窗组件使用队列模式实现方法


Posted in Javascript onJuly 23, 2020

前言

由于业务需要,需要在封装的弹窗组件中引入定时器实现倒计时效果,但是如果同时触发两个弹窗,就会导致计时器bug,前一个弹窗的定时器没有被清除,倒计时就会错乱,此时想到的解决办法就是采用队列模式,将每一个需要的弹窗存到队列中,依次的将弹窗展示出来,同时清除定时器

什么是队列

队列(Queue)是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在尾部进行插入操作(入队 enqueue),在头部进行删除操作(出队 dequeue)。队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。

JavaScript实现队列的效果

function ArrayQueue(){ 
  var arr = []; 
    //入队操作 
  this.push = function(element){ 
    arr.push(element); 
    return true; 
  } 
    //出队操作 
  this.pop = function(){ 
    return arr.shift(); 
  } 
    //获取队首 
  this.getFront = function(){ 
    return arr[0]; 
  } 
    //获取队尾 
  this.getRear = function(){ 
    return arr[arr.length - 1] 
  } 
    //清空队列 
  this.clear = function(){ 
    arr = []; 
  } 
    //获取队长 
  this.size = function(){ 
    return length; 
  } 
}

和vue封装的弹窗组件使用

首先要配合组件封装队列要进行修改

class Queue {
 dataStore = []
 constructor(){
  this.dataStore=[]
 }
 enqueue(e) {
  this.dataStore.push(e)
  console.warn('入队',this.dataStore);
 }

 dequeue() {
  this.dataStore.shift()
  console.warn('出队',this.dataStore);
 }

 front() {
  console.log(this.dataStore,'front')
  return this.dataStore[0]()
 }
 select(){
  return this.dataStore[0]
 }

 back() {
  return this.dataStore[this.dataStore.length - 1]
 }

 isEmpty() {
  if (this.dataStore.length == 0) {
   return true
  }
  return false
 }

 toString() {
  return this.dataStore.join(',')
 }
}

export default Queue

在弹出第一个队列的时候需要自执行。

在你的封装组件的函数中引入这个队列,同时实例化这个队列,写入两个方法.

const pushDialog = (eventName) => {
 if (queue.isEmpty()) {
  queue.enqueue(eventName);
  openDialog();
 } else {
  queue.enqueue(eventName);
 }
}
const openDialog = () => {
 // 打开弹窗
 queue.front();
}

在安装的方法中将每一个弹窗加入队列中

在vue中封装的弹窗组件使用队列模式实现方法

需要注意的是,每个弹窗是要被销毁的,不然会导致方法重复。

举例在确认方法和定时器后怎么出队列和清空定时器

在vue中封装的弹窗组件使用队列模式实现方法

到此这篇关于在vue中封装的弹窗组件使用队列模式实现的文章就介绍到这了,更多相关vue 封装的弹窗组件队列模式内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
给Function做的OOP扩展
May 07 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
使用Plupload实现直接上传附件至七牛云存储
Dec 26 Javascript
jQuery图片特效插件Revealing实现拉伸放大
Apr 22 Javascript
JavaScript设计模式经典之工厂模式
Feb 24 Javascript
jQuery插件formValidator实现表单验证
May 23 Javascript
JQuery动态添加Select的Option元素实现方法
Aug 29 Javascript
树结构之JavaScript
Jan 24 Javascript
使用JS编写的随机抽取号码的小程序
Aug 11 Javascript
webpack+react+antd脚手架优化的方法
Apr 02 Javascript
vue 解决addRoutes多次添加路由重复的操作
Aug 04 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
详解node.js 事件循环
Jul 22 #Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 #jQuery
详解vue中v-on事件监听指令的基本用法
Jul 22 #Javascript
使用vue实现通过变量动态拼接url
Jul 22 #Javascript
You might like
php漏洞之跨网站请求伪造与防止伪造方法
2013/08/15 PHP
php实现的漂亮分页方法
2014/04/17 PHP
php 伪静态之IIS篇
2014/06/02 PHP
JavaScript Timer实现代码
2010/02/17 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
EasyUI学习之Combobox级联下拉列表(2)
2016/12/29 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
vue axios用法教程详解
2017/07/23 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
python对excel文档去重及求和的实例
2018/04/18 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
python 同时读取多个文件的例子
2019/07/16 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Python使用re模块验证危险字符
2020/05/21 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
给面试官的感谢信
2014/02/01 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
仅用一句SQL更新整张表的涨跌幅、涨跌率的解决方案
2021/05/06 MySQL
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers