element 表单校验上传图片及富文本(vue2)

上传图片
这里上传图片是可以是一个集合的(多次上传),使用list-type="picture-card"
问题:
上传图片列表为空,点击【提交】按钮 出现校验 红字提示
但是上传图片成功之后,红字提示不消失,即校验未通过。

第一种:使用清除校验
在上传图片的方法中,接口调用成功之后,使用this.$refs['form'].clearValidate('coverPath')
然后再【提交】按钮校验里面判断一下 如果有图片则 清除一下。防止有其他条件没通过校验

data () {
    return {
      // 表单参数
      form: {
        coverPath: ''
      },
      // 表单校验
      rules: {
        coverPath: [
          { required: true, message: '文章封面不能为空', trigger: 'change' }
        ]
      }
    }
  },
submitForm () {
      this.$refs['form'].validate(valid => {
        if (valid) {
        //这里清除
        this.$refs['form'].clearValidate('coverPath')`
          addNews(this.form).then(response => {
            this.msgSuccess('新增成功')
            this.handleCancel()
          })
        }
      })
    },
uploadChange (file) {
      const formData = new FormData()

      formData.append('file', file.file)
      uploadImages(formData).then((res) => {
        this.fileList.push({
          name: res.fileName,
          url: this.getBaseUrl() + res.fileName
        })
        this.form.coverPath = this.fileList
        this.$refs['form'].clearValidate('coverPath')
      })
    },


第二种,模拟一个input绑定该值
处理校验不通过
data还是一样的

 uploadChange (file) {
      const formData = new FormData()

      formData.append('file', file.file)
      // formData.append('remark', '上传')
      // formData.append('parentId', this.$route.query.mid)
      uploadImages(formData).then((res) => {
        this.fileList.push({
          name: res.fileName,
          url: this.getBaseUrl() + res.fileName
        })
        this.form.coverPath = JSON.stringify(this.fileList)
      })
    },
<el-form-item label="文章封面" prop="coverPath">
        <el-upload action="#" list-type="picture-card" :file-list="fileList" :show-file-list="true"
          :before-upload="handleBeforeUpload" :http-request="uploadChange" :on-preview="handlePictureCardPreview"
          :on-remove="handleRemove" :limit="3" :on-exceed="handleExceed">
          <i class="el-icon-plus" />
        </el-upload>
        <el-dialog :visible.sync="dialogVisible">
          <img width="100%" :src="dialogImageUrl" alt="">
        </el-dialog>
        <span>最多上传3张,支持jpg,png,jpeg,gif</span>
        <el-input v-model="form.coverPath" :hidden="true"
          style="position: absolute;width: 0;height: 0;display: none;" />
      </el-form-item>

在这里插入图片描述


上传富文本

1.在子组件中change 事件中判断有无输入内容
然后flag 给父组件

父组件

<el-form-item label="文章正文" prop="content">
        <editor v-model="form.content" :min-height="192" @blur="contentChangeFn" />
</el-form-item>

// 富文本编辑器内容改变触发此事件方法
contentChangeFn (flag) {
  console.log(flag)
  if (flag) {
    this.$refs['form'].clearValidate('content')
  } else {
    // 让el-form校验,只校验content这个规则
    this.$refs['form'].validateField('content')
  }
}

提交按钮确认前
submitForm () {
  // 未输入内容 把该字段置空 要不校验不通过
  if (this.form.content == '<p><br></p>') {
    this.form.content = ''
  }
  this.$refs['form'].validate(valid => {
    if (valid) {
      addNews(this.form).then(response => {
        this.msgSuccess('新增成功')
        this.handleCancel()
      })
    }
  })
},

子组件

if (this.currentValue == '<p><br></p>' || !text || !this.currentValue) {
  this.$emit('blur', false)
} else { // 有内容输入,或者不是清除内容
  this.$emit('blur', true)
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 引入 element-plus 库 ```javascript import { ElForm, ElFormItem, ElInput, ElButton } from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; ``` 2. 在 template 中使用表单组件 ```html <template> <el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form-item label="用户名" prop="username"> <el-input v-model="form.username"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="form.password" type="password"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="submitForm">提交</el-button> </el-form-item> </el-form> </template> ``` 3. 在 script 中定义表单数据、校验规则和提交方法 ```javascript <script> import { ElForm, ElFormItem, ElInput, ElButton } from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; export default { name: 'FormDemo', components: { ElForm, ElFormItem, ElInput, ElButton }, data() { return { form: { username: '', password: '' }, rules: { username: [ { required: true, message: '请输入用户名', trigger: 'blur' } ], password: [ { required: true, message: '请输入密码', trigger: 'blur' } ] } } }, methods: { submitForm() { this.$refs.form.validate(valid => { if (valid) { // 校验通过,提交表单 console.log('submit form:', this.form); } else { // 校验不通过,提示用户 console.log('validate failed'); } }) } } } </script> ``` 4. 在 methods 中定义 submitForm 方法,使用 $refs.form.validate() 方法校验表单数据。如果校验通过,则提交表单数据;如果校验不通过,则提示用户。 5. 在校验规则中,可以设置多个校验规则。每个规则都包含三个属性:required 表示是否必填,message 表示校验不通过时的提示信息,trigger 表示触发校验的事件。常用的触发事件有 blur(失去焦点时校验)和 change(值改变时校验)。 6. 注意:在 Vue 3 中,必须使用 v-model 指令绑定表单数据,不能使用 v-bind:value 和 v-on:input,否则校验不会生效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值