elemengtUI中Form表单resetFields()无效问题

在elementUI的el-form组件库中,通过ref绑定el-form组件可以获取元素的一些数据以及对数据进行一些操作,以及编辑功能的实现

      <el-form
        ref="form"
        :rules="rules"
        :inline="true"
        :model="formUser"
        label-width="120px"
      >

在编程的过程中,发现element组库提供的resetFields()方法不生效,如何解决呢?

resetFields()官方解释:对该表单项进行重置,将其值重置为初始值并移除校验结果

  • 在编辑时通过 proxy.$refs.form.resetFields()进行清空数据失效这是为什么呢

  •     const EditUser = (userData) => {
          proxy.modelControl = 1;
          //显示元素  
          proxy.dialogVisible = true;
          // 将点击的数据赋给表单(直接赋值,form初始值就变成此赋值,因为dialog和赋值时同步的)
          proxy.$nextTick(() => {
            // 直接赋值并不会显示数据,因为是在下一次DOM更新之后才会显示
           proxy.formUser = userData;
          });
        };
    
    1. 通过上述操作的确可以使值的初始值就是空值,但是这里又有一个新的问题,什么问题呢?就是违背了我们的初衷,清空数据之后,编辑表单中没有数据显示,只能将清空操作放置别处,我们这里只能对其进行赋值操作,否则不会显示数据,并且还必须是异步赋值,保持初始值为空

    2. 但是异步赋值又会发现,这样页面就不显示我们需要编辑的数据了啊,这怎么办呢?

    3. 也很简单,$nextTick是在DOM更新之后渲染页面,我们就手动操作使其进行更新,vue对所有数据都会进行监听,对于这样直接赋值的并不会引起虚拟DOM更新,因为两个对象并未发生改变,只是属性值的替换,此时我们就可以生成一个新的对象来迫使vue进行DOM更新使其显示数据

    4. 针对这里我们可以使用深拷贝的方法来使DOM进行更新,因为这里对对象本身进行了操作(引用数据类型)

    5.     const EditUser = (userData) => {
            proxy.modelControl = 1;
            proxy.dialogVisible = true;
            // 将点击的数据赋给表单(直接赋值,form初始值就变成此赋值,因为dialog和赋值时同步的)
            // 将赋值操作之后,这样的话userData也就不是赋值为初始值,而是修改后的值
            proxy.$nextTick(() => {
              // 这里对对象进行了修改所以会触发es6的set函数从而导致DOM更新而显示数据,上面写法并不会
              Object.assign(proxy.formUser, userData);
            });
          };
      
    
     
    
    

通过上述方法呢我们就可以做到在编辑form表单数据使即显示数据,并使DOM进行更新并显示数据,对于上述清空操作是在新增中进行的,由于初始就是为空,所以编辑之后新增还是能清空表单,关闭和取消也能清空表单,也就完成了编辑功能

posted @   YYYang333  阅读(238)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示