• 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

    1. promiseValidate(key) {
    2. return new Promise((resolve, reject) => {
    3. try {
    4. this.$refs[key].validate(isValid => {
    5. resolve(isValid)
    6. })
    7. } catch (err) {
    8. reject(err)
    9. }
    10. })
    11. },

      case:对于IP地址的校验

    1. <el-table-column label="源地址" align="center" width="160">
    2. <template slot-scope="scope">
    3. <el-select
    4. v-if="scope.row.Addflag || scope.row.isEdit"
    5. v-model="Emptyselect"
    6. placeholder="请选择"
    7. style="width: 150px"
    8. >
    9. <el-option label="IP地址" value=""> </el-option>
    10. </el-select>
    11. <span v-if="!scope.row.isChange">{{
    12. scope.row.sourceIpAddress
    13. }}</span>
    14. <el-form
    15. style="margin-top: 10px"
    16. :ref="'SourceIpForm' + scope.row.curId"
    17. :key="scope.row.curId"
    18. label-width="0px"
    19. :class="
    20. scope.row.Addflag || scope.row.isEdit ? 'demo-ruleForm' : ''
    21. "
    22. :model="scope.row"
    23. v-show="scope.row.Addflag || scope.row.isEdit"
    24. >
    25. <el-form-item
    26. prop="sourceIpAddress"
    27. :rules="[
    28. {
    29. trigger: 'blur',
    30. id: scope.$index,
    31. validator: validateValue,
    32. },
    33. ]"
    34. >
    35. <el-input
    36. v-model.trim="scope.row.sourceIpAddress"
    37. style="width: 150px"
    38. clearable
    39. >
    40. </el-input>
    41. </el-form-item>
    42. </el-form>
    43. </template>
    44. </el-table-column>

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

    1. async confirmAdd() {
    2. //过滤出list中addFlag=true新增的数据
    3. let AddItems = this.list.filter(item => {
    4. return item.Addflag == true
    5. })
    6. var validates = null
    7. for (let key in AddItems) {
    8. validates = await Promise.all([
    9. this.promiseValidate('SourceIpForm' + AddItems[key].curId),
    10. this.promiseValidate('TargetIpForm' + AddItems[key].curId),
    11. this.promiseValidate('sourcePort' + AddItems[key].curId),
    12. this.promiseValidate('targetPort' + AddItems[key].curId),
    13. ])
    14. }
    15. let flag = validates.every(item => item == true)
    16. if (flag) {
    17. this.isLoading = true
    18. this.Dialogs.created = !this.Dialogs.created
    19. this.showFooter = false
    20. let newArrVal = JSON.parse(JSON.stringify(AddItems))
    21. newArrVal.map(e => {
    22. delete e.Addflag
    23. delete e.isChange //添加或编辑时的标识
    24. })
    25. //添加的接口
    26. let obj = {
    27. policiesId: this.ruleId,
    28. insertAfter: this.insertAfter,
    29. insertBefore: this.insertBefore,
    30. list: newArrVal,
    31. }
    32. addRule(obj).then(this.flashParent).catch(this.flush)
    33. }
    34. },

    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的错;     

  • 相关阅读:
    关于领导力
    怎么将视频压缩变小?
    每天40min,我们一起用70天稳扎稳打学完《JavaEE初阶》——33/70 第三十三天【JavaScript(webapi)】
    就业班 第三阶段(nginx) 2401--4.25 day4 nginx4 流量控制+访问
    第十三届蓝桥杯省赛JavaA组 H 题,JavaC组 I 题—— 因数平分和 (AC)
    网站被劫持了怎么办
    基于mbedtls的AES加密(C/C++)
    Nginx负载均衡&反向代理&动静分离
    c 几种父进程主动终止子进程的方法
    ssm医院挂号系统的设计与实现毕业设计源码211633
  • 原文地址:https://blog.csdn.net/lf811/article/details/126833692