ant Design 表单以及表单验证

今天用ant Design写了个修改密码的功能,随便记录一下

效果图

html代码

<div>
    <a-modal v-model="visible" title="修改密码" on-ok="handleOk">
      <template slot="footer">
        <a-button key="back" @click="handleCancel">
          取消
        </a-button>
        <a-button key="submit" type="primary" :loading="loading" :disabled="hasErrors(form.getFieldsError())" @click="handleOk">
          提交
        </a-button>
      </template>

<!--      下面的表单用form 表单-->

      <a-form :form="form" :label-col="{ span: 6 }" :wrapper-col="{ span: 12 }" @submit="handleSubmit">
        <a-form-item label="账号">
          <a-input size="large"
                   placeholder="请输入账号"
                   allow-clear
                   v-decorator="['username',validatorRules.username]">
            <a-icon slot="prefix"
                    type="user"
                    :style="{ color: 'rgba(0,0,0,.25)' }" />
          </a-input>
        </a-form-item>

        <a-form-item label="密码">
          <a-input-password
                   size="large"
                   placeholder="请输入密码"
                   allow-clear
                   v-decorator="['password',validatorRules.password]">
            <a-icon slot="prefix"
                    type="lock"
                    :style="{ color: 'rgba(0,0,0,.25)' }" />
          </a-input-password>
        </a-form-item>

        <a-form-item label="新密码">
          <a-input-password
              size="large"
              placeholder="请输入新密码"
              allow-clear
              v-decorator="['newPassword1',validatorRules.newPassword1]">
            <a-icon slot="prefix"
                    type="lock"
                    :style="{ color: 'rgba(0,0,0,.25)' }" />
          </a-input-password>
        </a-form-item>

        <a-form-item label="确认新密码">
          <a-input-password
              size="large"
              placeholder="请输入新密码"
              allow-clear
              v-decorator="['newPassword2',validatorRules.newPassword2]">
            <a-icon slot="prefix"
                    type="lock"
                    :style="{ color: 'rgba(0,0,0,.25)' }" />
          </a-input-password>
        </a-form-item>

      </a-form>

    </a-modal>
  </div>

js代码

export default {
  name: 'ModifyPassword',
  data() {
    return {
      loading: false,
      visible: false,

      form: this.$form.createForm(this),

      // 每个控件的验证规则
      validatorRules: {
        username: {rules: [{required: true, message: '请输入用户名!'}, {validator: this.validatePass,tirgger: 'change'}]},
        password: {rules: [{required: true, message: '请输入密码!'},{validator: this.validatePass,tirgger: 'change'}]},
        newPassword1: {rules: [{required: true, message: '请输新入密码!'},{validator: this.validatePass1,tirgger: 'change'}]},
        newPassword2: {rules: [{required: true, message: '请输新入密码!'},{validator: this.validatePass2,tirgger: 'change'}]},
      },

    };
  },
  methods: {
    handleSubmit(e) {
      console.log('这里')
      e.preventDefault();
      this.form.validateFields((err, values) => {
        if (!err) {
          console.log('Received values of form: ', values);
        }
      });
    },
    // 输入框长度验证方法
    validatePass(rule, value, callback){
      if (value.length<6 || value.length>12) {
        callback(new Error('长度应为6到12位'))
      }
      callback()
    },
    validatePass1(rule, value, callback){
      if (value.length<6 || value.length>12) {
        callback(new Error('长度应为6到12位'))
      }else
        // 验证新密码不能与旧密码一致
        if(this.form.getFieldValue('newPassword1')==this.form.getFieldValue('password')){
        callback(new Error('新密码不能与旧密码一致'))
      }
      callback()
    },
    validatePass2(rule, value, callback){
      // 验证输入长度
      if (value.length<6 || value.length>12) {
        callback(new Error('长度应为6到12位'))
      }else
        // 验证两次输入的新密码是否一致
      if(this.form.getFieldValue('newPassword1')!=this.form.getFieldValue('newPassword2')){
        callback(new Error('输入的新密码不一致'))
      }
      callback()
    },
    // 所有输入框正确输入提交按钮才能操作
    hasErrors(fieldsError) {
      return Object.keys(fieldsError).some(field => fieldsError[field]);
    },


      // 开启弹窗
    showModal() {
      this.visible = true;
    },
    // 关闭弹窗
    handleCancel(e) {
      console.log(e)
      this.visible = false;
    },
    // 提交更改密码操作(再这里面接口返回数据)
    handleOk(e) {
      console.log(e)
      this.loading = true;
      setTimeout(() => {
        this.visible = false;
        this.loading = false;
      }, 3000);
    },
  },
};

主要用到了几个表单属性,和几个api

form为一组控件,username  password  newPassword1 newPassword2这四个为单个控件被form包含

提交按钮处用到

form.getFieldsError() :获取一组输入控件的 Error ,如不传入参数,则获取全部组件的 Error

判断所有的输入框验证是否通过

validator 为自定义验证规则(有一些简单的规则可以用ant 自带的)

form.getFieldValue(‘控件名称’):获取一个输入控件的值

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值