在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 相关文章推荐
Jquery数独游戏解析(一)-页面布局
Nov 05 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
Mar 11 Javascript
jquery 多个radio的click事件实例
Dec 03 Javascript
JS去除重复并统计数量的实现方法
Dec 15 Javascript
javascript操作cookie
Jan 17 Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 Javascript
jQuery中.attr()和.data()的区别分析
Sep 03 jQuery
深入理解React高阶组件
Sep 28 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
使用webpack搭建vue项目及注意事项
Jun 10 Javascript
jquery向后台提交数组的代码分析
Feb 20 jQuery
基于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
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
基于命令行执行带参数的php脚本并取得参数的方法
2016/01/25 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
JavaScript栏目列表隐藏/显示简单实现
2013/04/03 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
jQuery中:last选择器用法实例
2014/12/30 Javascript
JQuery实现带排序功能的权限选择实例
2015/05/18 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
计算机专业学生求职信分享
2013/12/15 职场文书
啦啦队口号大全
2014/06/16 职场文书
九一八事变演讲稿
2014/09/05 职场文书
旷工检讨书大全
2015/08/15 职场文书
springboot临时文件存储目录配置方式
2021/07/01 Java/Android