1、有三个表格
2、添加不同得数据
3、在点击撤销时删除最后一条添加的数据,在点击恢复时复原删除的数据

<template><div style="width:1000px;margin:0 auto"><Button type="info" @click="handleOk">添加</Button><Table :columns="columns" :data="datas"></Table><Button type="info" @click="handleOkOne">添加</Button><Table :columns="columnsOne" :data="datasOne"></Table><Button type="info" @click="handleOkTwo">添加</Button><Table :columns="columnsTwo" :data="datasTwo"></Table><Button @click="handleRevoke">撤销</Button><Button type="primary" @click="handleRecovery">恢复</Button></div>
</template>

顺序存储:用js内置对象Array实现 定义一个栈

function ArrayStack () {let arr = [];// 压入栈中  this.push = function (element) {arr.push(element);}// 弹出栈顶元素  this.pop = function () {return arr.pop();}// 查看栈顶元素  this.top = function () {return arr[arr.length - 1];}// 获取栈长  this.size = function () {return arr.length;}// 清空栈  this.clear = function () {arr = [];return true;}this.toString = function () {return arr.toString();}
}
export default {data () {return {columns: [{ type: 'index', width: 60, align: 'center' },{ title: 'Name', key: 'name' },{ title: 'Age', key: 'age' },{ title: 'Address', key: 'address' }],datas: [],columnsOne: [{ type: 'index', width: 60, align: 'center' },{ title: 'Name', key: 'name' },{ title: 'Age', key: 'age' },{ title: 'Address', key: 'address' }],datasOne: [],columnsTwo: [{ type: 'index', width: 60, align: 'center' },{ title: 'Name', key: 'name' },{ title: 'Age', key: 'age' },{ title: 'Address', key: 'address' }],datasTwo: [],stackRevoke: new ArrayStack(), //撤销栈stackRecovery: new ArrayStack() //恢复栈}},methods: {// 添加时向恢复栈中加数据handleOk () {let obj = { id: 'text001', name: '北京市', age: 18, address: '北京', code: '1001' }this.datas.push(obj)this.stackRecovery.push(obj)},handleOkOne () {let obj = { id: 'text005', name: '石家庄市', age: 18, address: '河北省', code: '1002' }this.datasOne.push(obj)this.stackRecovery.push(obj)},handleOkTwo () {let obj = { id: 'text009', name: '杭州市', age: 18, address: '浙江省', code: '1003' }this.datasTwo.push(obj)this.stackRecovery.push(obj)},// 撤销(删除)handleRevoke () {let p = this.stackRecovery.pop() //读取恢复栈顶数据if (p !== undefined) {switch (p.code) {case '1001': {if (this.datas.length > 0) {let p = this.datas.pop()this.stackRevoke.push(p) //向删除栈中增加数据}}break;case '1002': {if (this.datasOne.length > 0) {let p = this.datasOne.pop()this.stackRevoke.push(p)}}break;case '1003': {if (this.datasTwo.length > 0) {let p = this.datasTwo.pop()this.stackRevoke.push(p)}}break;}}},// 恢复(复原)handleRecovery () {let p = this.stackRevoke.pop() //读取撤销栈中得第一条数据if (p !== undefined) { //判断取出对象是否存在switch (p.code) { //判断是哪一个数组下得数据case '1001':this.stackRecovery.push(p) //向恢复栈中添加数据this.datas.push(p) //向指定数组添加数据break;case '1002':this.stackRecovery.push(p)this.datasOne.push(p)break;case '1003':this.stackRecovery.push(p)this.datasTwo.push(p)break;}}}}
}
</script>

vue实现的一个撤销和恢复功能相关推荐

  1. 我们常用的撤销和恢复功能,你知道它们使用了什么设计模式吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 滴水微澜 来源 | cnblogs.com/z ...

  2. js实现撤销恢复_我们常用的撤销和恢复功能,它们使用了什么设计模式实现吗?...

    现有场景描述: 现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现的吗? 它们用的是命令模式+观察者模式,你答对了吗? 简单科普一下 啥是命令模式(Comm ...

  3. 再涨个姿势,我们常用的撤销和恢复功能,你知道它们使用了什么设计模式实现吗?...

    作者:滴水微澜 cnblogs.com/zhou--fei/p/9905536.html 现有场景描述: 现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现 ...

  4. java 撤销恢复按钮_再涨个姿势,我们常用的撤销和恢复功能,你知道它们使用了什么设计模式实现吗?...

    作者:滴水微澜 现有场景描述:现在无论是系统自带的键盘还是第三方的键盘一般都自带撤销和恢复功能,你知道它们是用的什么模式实现的吗? 它们用的是命令模式+观察者模式,你答对了吗? 简单科普一下 啥是命令 ...

  5. [vue] 用vue怎么实现一个换肤的功能?

    [vue] 用vue怎么实现一个换肤的功能? 这个--全局的theme属性然后做class判断或者加载不同的样式文件.一种是编译时换肤 一种是用户操作换肤.编译时换肤可以通过css in js相关技术 ...

  6. qt实现撤销和恢复功能

    from PyQt5.QtWidgets import QUndoStack, QUndoCommandclass Test(object):def __init__(self):super().__ ...

  7. js实现撤销恢复功能

    Js实现撤销恢复功能 之前一个项目要自己写个前端插件,其中一个的功能是实现对表格(table)的撤销和恢复功能,在网上百度了一大堆也没有找到合适的方法,后来灵光一闪,想到了一个简单的方法:用数组保存之 ...

  8. java 撤销恢复按钮_java文本的撤销和恢复

    文本的撤销和恢复是通过 addUndoableEditListener(UndoableEditListener listener)这个方法来注册实现的.只要是Document类及其子类都可以注册撤销 ...

  9. vue实现一个简单的购物车功能

    今天做了一个简单的购物车功能,主要用了计算属性,指令等知识点,代码如下: <template> <div><div id="cart" v-cloak ...

最新文章

  1. ListView与DateGridView
  2. 谈谈Java中的volatile
  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板定义
  4. 这是我见过最全面的Python装饰器详解!没有学不会这种说法
  5. ChronicleMap –具有堆外内存的Java体系结构
  6. 【Elasticsearch】使用 Grok 和 Elasticsearch 为数据添加结构
  7. 阅读SSM项目之scm【第一篇】
  8. javascript中验证日期和日期时间格式
  9. 行星级计算机,称霸两千余年的最快“计算机”——我国的算盘,两弹一星都靠它...
  10. 美了哭了,AduSkin是我见过最好看的WPF控件库
  11. 操作系统中的句柄是什么?
  12. Emacs-224-彩虹猫的实现
  13. k8s Container资源控制: requests和limits
  14. Linux学习整理-网络防火墙iptables-实践篇1
  15. 海思开发板设置开机自启动方法
  16. 「C++ MFC」 “多媒体定时器实例”讲解
  17. Ubantu20.04 安装搜狗输入法的详细步骤和遇到的问题
  18. 传奇从这里诞生--JAVA的N个十
  19. 英特尔®以太网控制器E810介绍:面向5G核心网络
  20. altium designer常用元件电气符号和封装形式

热门文章

  1. Android之ViewPager实现图片无限循环轮播
  2. PHP优惠卷返利网源码_用PHP做了一个领取优惠券活动的示例代码
  3. chatgpt赋能Python-python_0j
  4. (12/05/21) vue-element-admi介绍 后台系统基础环境搭建
  5. java计算器or_java计算器
  6. echarts 绘制地图设置其中某些板块高亮(颜色)
  7. 怎么入门网络安全,学这两类证书就够了NISP或CISP
  8. 逆向工程师逆向还原APP和代码,国产化就是这样
  9. python爬虫(三):爬虫常用工具包
  10. Scikit-learn学习系列 | 2. sklearn数据预处理的相关方法