vue + element表单动态校验

最近项目中遇到了表单提交,需要根据选择框进行表单的动态校验,一般的教程都是使用:rules进行表单校验,但是如果表单的项是动态的呢,那么我们就不太好写这个rules规则了。这个时候可以使用多个rules校验规则,再根据需要动态选择使用哪种校验规则。

例如:这里的一个dialog提交表单,里面有需要根据选择框来确定是否校验驳回原因和推送内容。

<el-dialog
        title="审核"
        :visible.sync="centerDialogVisible"
        center>
  <el-form ref="checkData"  :model="checkData" :rules="rulesList">
    <el-form-item label="是否通过" prop="state">
      <el-select v-model="checkData.state" placeholder="请选择">
        <el-option
                v-for="item in stateOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value">
        </el-option>
      </el-select>
    </el-form-item>
    <el-form-item  prop="rejectReason" label="驳回原因" v-if="checkData.state == 'CHECK_FILED'">
        <el-input  v-model="checkData.rejectReason" type="textarea" class="input-style"  placeholder="请输入驳回原因"/>
    </el-form-item>
    <el-form-item  prop="pushContent" label="推送内容">
      <el-input  v-model="checkData.pushContent" type="textarea" class="input-style" placeholder="请输入推送内容"/>
    </el-form-item>
  </el-form>
  <span slot="footer" class="dialog-footer">
  <el-button type="primary" @click="centerDialogVisible = false">取 消</el-button>
  <el-button type="primary" @click="handleSubmit" >确 定</el-button>
  </span>
</el-dialog>

这个时候我们该怎么处理呢?

1,添加两个rules规则

successRules: {
  state: [
     {required: true, message: '请选择审核状态', trigger: 'change'}
  ],
  pushContent: [     {required: true, message: '请输入推送内容', trigger: 'blur'}
  ]
},
failedRules: {    state: [
        {required: true, message: '请选择审核状态', trigger: 'change'}
    ],
    rejectReason: [        {required: true, message: '请输入驳回原因', trigger: 'blur'}
    ]
}

2,添加一个rules规则选择方法(注意,这里一定要放到vue的计算属性里面,否则不生效)

computed: {
  rulesList: function() {
    if (this.checkData.state) {
      if (this.checkData.state === 'CHECK_SUCCESS') {
        return this.successRules
      }        return this.failedRules
    }else {      return this.successRules;
    }  }
},

3,在需要校验的form上加上校验规则 :rules="rulesList"

即可动态根据checkData.state选择框选择的值来选择不同的校验规则中去。

4,或者我看也有人说可以使用三元表达式来确定使用哪个路由规则,但是我尝试了下,好像没起作用,可能是我漏了哪里,也请谁弄出来了告诉我一下。
        方法如下:

<el-form ref="checkData"  :model="checkData" :rules="this.checkData.state === 'CHECK_SUCCESS' ? this.successRules : this.failedRules">
暂无评论