ivew+vue实现表单设计器--前进后退操作(三)

7 篇文章 3 订阅
4 篇文章 2 订阅

操作前进、后退操作,这个功能比较重要,而且必须提前设计后,不然后面再来兼容这个功能就比较麻烦。
在这里插入图片描述
这里只对dom的增加、删除等渲染进行前进、后退操作,考虑到web到性能,不对属性操作进行前进、后退。

  • 添加组件,后退数组操作

在这里插入图片描述

  • 点击后退,堆栈操作
    在这里插入图片描述

  • 点击前进,逆向操作堆栈而已。

  • 第一步申明了2个数组,1个对象映射对象

 data() {
    return {
      forwardList:[],
      backwardList:[],
      objMap:{},
    }
  },

核心的前进后退方法大概如下:

    //操作前进
    forwardBtn(){
      let preRendKey=this.forwardList.pop();
      let itemObj=this.objMap[preRendKey];
      //如果存在父节点 则需要找到父节点进行添加操作 如果不存在父节点 则直接操作drawingList
      if(itemObj.parentRendKey!=null&&itemObj.parentRendKey!==""){
       let  prentObj=getObjByRendKey(itemObj.parentRendKey,this.drawingList);
       if(prentObj==null){
         return void(0);
       }
       //将节点放入到子集合中
       if(prentObj.__config__.children==null){
         prentObj.__config__.children=[];
       }
        prentObj.__config__.children.push(itemObj);
      }else{
        this.drawingList.push(itemObj);
      }
      this.backwardList.push(preRendKey);
    },
    //操作回退
    backBtn(){
      let backRendKey=this.backwardList.pop();
      if(backRendKey!=null){
        let delObj=removeObjByRendKey(backRendKey,this.drawingList);
        this.objMap[backRendKey]=delObj;
        this.forwardList.push(backRendKey);
      }
    },
    /**
     * 循环list将其中的rendKey取出来放到backwardList中
     * @param drawingList
     */
    initBackwardList(drawingList){
      addRendKeyToList(this.backwardList,drawingList);
    },

这样就实现了前进后退的大概操作,当然还有些细节,后续再进行优化完善。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值