• vue3 获取eldialog里面的dom结构 + 递归式深拷贝 花


    vue3 获取el-dialog里面的dom结构 + 深拷贝

    因为在vue3里方法都是在setup里面,dialog刚加载过来时是不存在的所以获取不到里面的dom结构

    而setup里面不存在this,所以可以在页面执行方法的时候传入this,从而获取到dom:示例……

    下列代码是获取dialog里面的form表单进行表单重置:

    dom结构:

    <el-dialog
          title="添加信息项"
          v-model="dialogVisible"
          width="800px"
        >
          <el-form
            :model="info"
            label-width="180px"
            style=" 400px; margin-left:50px;"
            ref="addData"
            :rules="rules"
          >
            <el-form-item label="信息项名称" prop="name">
              <el-input v-model="info.name"></el-input>
            </el-form-item>
            <el-form-item label="信息项类型" prop="type">
              <el-select v-model="info.type" placeholder="请选择" class="tw-w-full">
                <el-option
                  v-for="item in dataType"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="信息项信息敏感级别" prop="rank">
              <el-select v-model="info.rank" placeholder="请选择" class="tw-w-full">
                <el-option
                  v-for="item in secrecy"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="共享类型" prop="shareType">
              <el-select v-model="info.shareType" placeholder="请选择" class="tw-w-full">
                <el-option
                  v-for="item in shareType"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="来源系统名称" prop="systemName">
              <el-input v-model="info.systemName"></el-input>
            </el-form-item>
          </el-form>
          <div name="footer">
            <el-row :gutter="10">
              <el-col
                :span="6"
                :push="18"
              >
                <el-button
                  type="primary"
                  @click="addInfo(this)"
                >确 定</el-button>
                <el-button @click="reset(this)">取 消</el-button>
              </el-col>
            </el-row>
          </div>
        </el-dialog>
    

    js:

    //重置
    const reset = (node) => {
     nextTick(()=>{
      node.addData.resetFields()
     })
      dialogVisible.value = false
    }
    //添加
    const addInfo = (node) => {
         table.value.push(deepClone(info.value)) //这里涉及到浅拷贝和深拷贝,浅拷贝清空的时候添加的信息也会被清除,所以我们这里做一下深拷贝
         reset(node)//添加完成调一下清除表单验证,否则再次添加表单会有提示
     }
    }
    
    
    //深拷贝
    /**
     * @param {Object} source
     * @returns {Object}
     */
    export function deepClone (source) {
      if (!source && typeof source !== 'object') {
        throw new Error('error arguments', 'deepClone')
      }
      const targetObj = source.constructor === Array ? [] : {}
      Object.keys(source).forEach(keys => {
        if (source[keys] && typeof source[keys] === 'object') {
          targetObj[keys] = deepClone(source[keys])
        } else {
          targetObj[keys] = source[keys]
        }
      })
      return targetObj
    }
                  
    

      

  • 相关阅读:
    服务器并发由200到4000并发的一个优化
    HTTP之一 If-Modified-Since & If-None-Match
    HTTP之二 http 301 和 302的区别
    003_内存的深入理解
    002_IO磁盘深入理解
    django学习笔记【003】创建第一个带有model的app
    MySQL innodb_autoinc_lock_mode 详解
    django学习笔记【002】创建第一个django app
    django学习笔记【001】django版本的确定&创建一个django工程
    innodb引擎redo文件维护
  • 原文地址:https://www.cnblogs.com/bu1204/p/15936730.html
Copyright © 2020-2023  润新知