Element-UI 问题记录(3/3)

一. Tags 组件动效异常

使用列表渲染时,如果使用index作为key的话,会导致组件的动效异常。

<el-tag type="info"
        size='medium'
        :disable-transitions='true'
         v-for="tag in scope.row.tags"
        :key="tag.name">{{tag.name}}</el-tag>

解决方案:可以设置:disable-transitions='true'关闭动效,当然最好的办法是不用index。

二. Table 组件行内编辑的表单验证

当以上两个组件组合行内编辑框表的时候,比如:

<el-table-column label="省份代码"
                 align="center">
      <template slot-scope="scope">
          <template v-if="scope.row.edit">
            <el-form :ref="'code'+scope.$index"
                     :rules="rules"
                     :model="scope.row">
              <el-form-item prop='code'>
                <el-input size="mini"
                          v-model.number="scope.row.code"></el-input>
              </el-form-item>
            </el-form>
          </template>
          <span v-else>{{scope.row.code}}</span>
      </template>
 </el-table-column>

一般是需要表单验证的,目前想到的办法就是一个cell一个表单,这就会遇到问题:

ref的怎么命名,可以保证每行的表单之间独立验证,且一行内的表单统一验证

解决方案:命名参考以上代码,我通过数据的key+每行的$index进行命名,并对保存按钮这样传参:

<el-button v-if="scope.row.edit"
           type="success"
           size="mini"
           @click="edit(scope.row,[Object.keys(scope.row)],scope.$index)">保存</el-button>
<el-button v-else
           type="primary"
           size="mini"        
           @click='scope.row.edit=!scope.row.edit'>编辑</el-button>

方法内部:

edit(row, formNameArr, index) {
      let success = true
      formNameArr[0] = formNameArr[0].map((key) => {
        return key + index
      })
      for (const column of formNameArr[0]) {
        if (this.$refs[column]) {
          this.$refs[column].validate((valid) => {
            if (!valid) {
              success = false
            }
          })
        }
      }
      if (success) {
       // 发送改动请求
      }
    }

暂且解决了问题,以后有更好的办法再说ԅ(¯﹃¯ԅ)

三. 表单验证数字长度

包括antd和element-ui的表单验证都使用了 async-validator ,但是在并不能验证数字长度,即使使用了.number修饰符。

表单验证数字长度

找了下源码,发现对于数字类型并没有做处理

async-validator/src/rule/range.js
// len为验证的长度,val为用户输入的数组或字符串长度
if (len) {
  if (val !== rule.len) {
    errors.push(util.format(options.messages[key].len, rule.fullField, rule.len));
  }
}

解决方案:要么去完善插件的源代码,或者不使用.number修饰符,就把输入值当作字符串处理,在需要的时候转换为数字。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,189评论 19赞 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,400评论 3赞 119
  • 打开记忆的大门,在我的眼前,展现了 一个五彩缤纷的照片库。它记载了许许多多的回忆,可是,岁月沧桑,许许多多...
    时光的漏斗wp阅读 247评论 0赞 1
  • 小时候,教科书上总是教我们唯物主义是对的,唯心主义是不对的。 现在我才明白,这个世界没有什么是真正对的,只是你怎样...
    胡诌1985阅读 165评论 0赞 0

友情链接更多精彩内容