vue中iview组件实现表单数据的动态校验

1.实现效果

在这里插入图片描述

2.实现原理

  • iview组件库Form表单, ref=“formValidate”,:model=“formInline”,:rules=“ruleValidate”。
  • 选择审核结果的时候动态的设置备注的规则,当为通过为非必填,反之为必填。
  • 为备注项设置相应的动态rule:
:rules="formInline.status == '2'? ruleValidate.remark: [{ required: false }]"

3.实现代码

<template>
  <div class="content">
    <Card>
      <p slot="title">表单动态校验</p>
      <Form
        :label-width="100"
        ref="formValidate"
        :model="formInline"
        :rules="ruleValidate"
      >
        <FormItem label="审核结果:" prop="status">
          <Select
            v-model="formInline.status"
            placeholder="请选择审核结果"
          >
            <Option value="1">审核通过</Option>
            <Option value="2">审核驳回</Option>
          </Select>
        </FormItem>
        <FormItem
          label="备注:"
          prop="remark"
          :rules="
            formInline.status == '2'
              ? ruleValidate.remark
              : [{ required: false }]
          "
        >
          <Input v-model="formInline.remark" type="textarea"></Input>
        </FormItem>
        <div style="text-align: right; padding: 20px 0">
          <Button size="large" type="default" @click="cancelAction" class="mr10"
            >取消</Button
          >
          <Button size="large" type="primary" @click="addAction">确认</Button>
        </div>
      </Form>
    </Card>
  </div>
</template>
<script>
export default {
  data() {
    return {
      formInline: {
        remark: "",
        status: "",
      },
      ruleValidate: {
        status: [
          { required: true, message: "审核结果不能为空", trigger: "change" },
        ],
        remark: [
          { required: true, message: "请填写不通过原因", trigger: "blur" },
        ],
      },
    };
  },
  methods: {
    addAction() {
      let data = { ...this.formInline };
      console.log(data);
      this.$refs.formValidate.validate((valid) => {
        if (valid) {
          this.$Message.success("操作成功");
          this.cancelAction();
        }
      });
    },
    cancelAction() {
      Object.keys(this.formInline).forEach((key) => {
        this.formInline[key] = "";
      });
      this.$refs["formValidate"].resetFields();
    },
  },
};
</script>

4.完整代码,关注公众号 苏苏的bug,更多vue相关,尽在苏苏的码云如果对你有帮助,欢迎你的star+订阅!

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过在子组件使用`v-model`指令,并将父组件表单校验状态作为`v-model`的绑定值,来避免父组件表单校验触发子组件的输入框。具体步骤如下: 1. 在父组件定义表单校验状态,并将其作为`v-model`的绑定值传递给子组件。 2. 在子组件使用`v-model`指令绑定输入框的值,并将其绑定到子组件数据属性上。 3. 在子组件使用`watch`监听父组件传递的表单校验状态,当表单校验状态发生变化时,根据需要进行相应的处理。 下面是一个示例代码: ```vue <!-- 父组件 --> <template> <div> <form> <child-component v-model="formValid"></child-component> <button @click="validateForm">校验表单</button> </form> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { formValid: false }; }, methods: { validateForm() { // 校验表单逻辑 } } }; </script> <!-- 子组件 --> <template> <div> <input v-model="inputValue" type="text"> </div> </template> <script> export default { props: ['value'], data() { return { inputValue: '' }; }, watch: { value(newValue) { // 根据父组件传递的表单校验状态进行相应的处理 } } }; </script> ``` 在上述示例,父组件通过`v-model`将表单校验状态`formValid`传递给子组件,并在子组件使用`watch`监听`value`属性的变化。当父组件表单校验状态发生变化时,子组件可以根据需要进行相应的处理,例如禁用输入框或显示错误提示信息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值