IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> el-table嵌套el-form表单的案例 -> 正文阅读

[JavaScript知识库]el-table嵌套el-form表单的案例

添加和编辑时显示的是form表单,默认展示的是text

1.控制form表单和text展示的第三方变量

变量:唯一且互不影响

添加的时候,借助list.length作为curId

编辑校验,传入当前行下的curId实现校验

?for (let key in this.entryList) {

? ? ? ? validates = await Promise.all([

? ? ? ? ? this.promiseValidate('ipForm' + key),

? ? ? ? ? this.promiseValidate('portForm' + key),

? ? ? ? ])

? ? ? }

//找不到dom元素,报错

2. 一次性添加多条,实现校验

借助promise.all

 promiseValidate(key) {
      return new Promise((resolve, reject) => {
        try {
          this.$refs[key].validate(isValid => {
            resolve(isValid)
          })
        } catch (err) {
          reject(err)
        }
      })
    },

? case:对于IP地址的校验

 <el-table-column label="源地址" align="center" width="160">
        <template slot-scope="scope">
          <el-select
            v-if="scope.row.Addflag || scope.row.isEdit"
            v-model="Emptyselect"
            placeholder="请选择"
            style="width: 150px"
          >
            <el-option label="IP地址" value=""> </el-option>
          </el-select>
          <span v-if="!scope.row.isChange">{{
            scope.row.sourceIpAddress
          }}</span>
          <el-form
            style="margin-top: 10px"
            :ref="'SourceIpForm' + scope.row.curId"
            :key="scope.row.curId"
            label-width="0px"
            :class="
              scope.row.Addflag || scope.row.isEdit ? 'demo-ruleForm' : ''
            "
            :model="scope.row"
            v-show="scope.row.Addflag || scope.row.isEdit"
          >
            <el-form-item
              prop="sourceIpAddress"
              :rules="[
                {
                  trigger: 'blur',
                  id: scope.$index,
                  validator: validateValue,
                },
              ]"
            >
              <el-input
                v-model.trim="scope.row.sourceIpAddress"
                style="width: 150px"
                clearable
              >
              </el-input>
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>

3. 确认添加的时候,需要筛选出,新增的数据,并对其内容进行校验,全部符合条件的情况下,才允许调对应的添加或编辑接口,实现数据更新;? ??

 async confirmAdd() {
      //过滤出list中addFlag=true新增的数据
      let AddItems = this.list.filter(item => {
        return item.Addflag == true
      })
      var validates = null
      for (let key in AddItems) {
          validates = await Promise.all([
            this.promiseValidate('SourceIpForm' + AddItems[key].curId),
            this.promiseValidate('TargetIpForm' + AddItems[key].curId),
            this.promiseValidate('sourcePort' + AddItems[key].curId),
            this.promiseValidate('targetPort' + AddItems[key].curId),
          ])
      }
      let flag = validates.every(item => item == true)
      if (flag) {
        this.isLoading = true
        this.Dialogs.created = !this.Dialogs.created
        this.showFooter = false
        let newArrVal = JSON.parse(JSON.stringify(AddItems))
        newArrVal.map(e => {
          delete e.Addflag
          delete e.isChange   //添加或编辑时的标识
        })
        //添加的接口
        let obj = {
          policiesId: this.ruleId,
          insertAfter: this.insertAfter,
          insertBefore: this.insertBefore,
          list: newArrVal,
        }
        addRule(obj).then(this.flashParent).catch(this.flush)
      }
    },

4.编辑时踩得坑

  • 针对端口类型的数据,进行回显的时候,绑定在input,被转换为String;所以在执行回显的这一步,将对应的数据强制转换为对应的数据类型;避免内容显示在input上,走校验的时候不符合条件;
  • 将回显的数据删除,点确认,提示内容不能为空,再次点编辑,上一次的校验内容仍存在;如何清空上一次的校验,将curId,作为key,添加到每一个form对应的位置;即可实现清除校验;

5.在使用?this.$refs[key].validate验证对应的form时

  • ?this.promiseValidate('headerForm' + key),不是在for...in时调用的话;直接在promiseValidate函数中使用? this.$refs[key],即可获取到对应的元素

  • 在for...in中调用this.promiseValidate('headerForm' + key)的话,此时的??let dom = this.$refs[key] //[vcomponent]?,因此在promiseValidate函数中使用? this.$refs[key][0],才能获取到对应的元素;(场景)

  • ?

  • 获取不到dom元素,报this.$refs.......is not a function的错;? ? ?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:54:56  更:2022-09-15 01:57:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:31:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码