美文网首页
el-ui复选框的那些坑,你一定遇到过

el-ui复选框的那些坑,你一定遇到过

作者: Hsugar | 来源:发表于2019-08-01 22:53 被阅读0次

在一次次遇到复选框的问题后,心中感慨:element-ui的复选框最能出些幺蛾子(╥﹏╥)
以下情景:

  • 当前页面展示的表格列表根据选择弹框的数据展示
  • 列表可删除,再次点击弹框复选框勾选应随之变化
    问题1:点击删除后,复选框的勾选没有随之变化
    问题2:弹框中勾选数据并没有确认而且弹框未消失,列表数据居然改变了
    问题3:弹框中勾选数据,点击确定赋值,目前正常;第二次弹框勾选点击取消列表数据仍然改变了...
    问题4: 2.8.2版本及以下表格设置max-height,样式会错乱
    解决如下:
    针对问题1、2:
//添加班级弹框
addClass(){
    this.showDialog = true;
    Object.assign(this.$data.filterForm,this.$options.data().filterForm);
    this.getClassList();
    this.$nextTick(function() {
    this.toggleSelection(this.choosedList)
    })
    `上篇文章介绍过,复选框的勾选没有双向绑定。需要在表格的store里同步修改`
    if(this.$refs.classList){
      `直接赋值引用数据只是进行了浅拷贝`
        //this.$refs.classList.store.states.selection = this.choosedList
        Object.assign(this.$refs.classList.store.states.selection,this.choosedList)
    }
},

针对问题3:

//点击确定赋值
dialogConfirm(){
  `确定之后直接赋值进行了浅拷贝,所以确定之后再次点击数据被改变`
   //this.choosedList = this.tagArr
    this.choosedList = JSON.parse(JSON.stringify(this.tagArr));
    this.showDialog = false;
},

JSON.parse(JSON.stringify(obj))我们一般用来深拷贝

就是利用JSON.stringify 将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象;
序列化的作用是存储(对象本身存储的只是一个地址映射,如果断电,对象将不复存在,因此需将对象的内容转换成字符串的形式再保存在磁盘上 )和传输;
例如 如果请求的Content-Type是 application/x-www-form-urlencoded,则前端这边需要使用qs.stringify(data)来序列化参数再传给后端,否则后端接受不到; ps: Content-Type 为 application/json;charset=UTF-8或者 multipart/form-data 则可以不需要 );
但 如果对象中存在循环引用的情况也无法正确实现深拷贝

提醒,在弹框关闭或者点击取消时,清空复选框的勾选;等显示时重新赋值勾选,避免勾选错误

//弹框关闭
dialogClose() {
    this.showDialog = false;
    this.$refs.classList.clearSelection()       
},

针对问题4,要不就是升级版本,要不就是自己写样式。相对会处理简单一些
希望对同道中人有所帮助~~ ❥(^_-)

相关文章

网友评论

      本文标题:el-ui复选框的那些坑,你一定遇到过

      本文链接:https://www.haomeiwen.com/subject/hqehdctx.html