【问题标题】:Vuelidate password and confirm password in Vuejs?Vuejs中的Vuelidate密码和确认密码?
【发布时间】:2021-02-28 14:36:05
【问题描述】:

export default {
  name: "HelloWworld",

  data: function () {
    return {
      
      isHidden: false,
      isWelcome: false,
      isFadeout: false,
      
      }
      }

<div  v-if="!isHidden">
 //some code for screen1
 
  <button v-on:click="isHidden = true"> HELLO</button>
  </div>
  
   <div  v-else-if="isHidden && !isFadeout">
 //some code for screen 2
 
  <button v-on:click="isFadeout = true"> Hi</button>
  </div>
  
   <div  v-else-if="isFadeout && isHidden && !isWelcome">
 <input
            :type="passwordFieldType"
            v-model="user.password"
            id="password"
            name="password"
            class="input-section-three"
            :class="{ 'is-invalid': submitted && $v.user.password.$error }"
            placeholder="Enter new password"
            :maxlength="maxpassword"
            v-on:keypress="isPassword($event)"
          />

<div
            v-if="submitted && $v.user.password.$error"
            class="invalid-feedback-two"
          >
            <span v-if="!$v.user.password.required">Password is required</span>
            <span v-if="!$v.user.password.minLength"
              >Minimum 8 character with
                        alphanumeric along with 1 capital letter, 1 small letter
                        and 1 special character at least</span
            >
          </div>

   <input
            :type="passwordFieldTypetwo"
            v-model="user.confirmPassword"
            id="confirmPassword"
            name="confirmPassword"
            class="input-section-three"
            :class="{
              'is-invalid': submitted && $v.user.confirmPassword.$error
            }"
            placeholder="Confirm password"
            :maxlength="maxconfirmpassword"
            v-on:keypress="isconfirmPassword($event)"
            :disabled="user.password.length < 8"
          />
           <div
            v-if="submitted && $v.user.confirmPassword.$error"
            class="invalid-feedback-two"
          >
            <span v-if="!$v.user.confirmPassword.required"
              >Confirm Password is required</span
            >
            <span v-else-if="!$v.user.confirmPassword.sameAsPassword"
              >Password must match</span
            >
          </div>
          
 <button             v-on:click="isWelcome = user.confirmPassword.length >= 8"
 > SUBMIT </button>
  </div>
  
   <div  v-else-if="isWelcome">
 //some code for screen 4
 
  <button>Fine</button>
  </div>

问题是,最初如果我单击屏幕 3 中的提交按钮,验证工作正常,但如果我输入的密码不匹配,但如果超过 8 个字符,则在密码确认字段中。它正在重定向到第四个屏幕。但我想做的是,如果密码与确认密码字段匹配,则只需要重定向到第 4 个屏幕。

【问题讨论】:

    标签: vue.js vuelidate


    【解决方案1】:

    请尝试以下步骤,它将帮助您解决问题。

    第 1 步:使用 npm install --save vuelidate 安装 vuelidate

    第二步:在main.js注册vuelidate

    import Vuelidate from 'vuelidate'
    Vue.use(Vuelidate)
    

    第 3 步:从 vuelidate/lib/validators 导入 required, email, minLength, sameAs

    import { required, email, minLength, sameAs } from 'vuelidate/lib/validators'
    

    第 4 步:添加验证

    validations: {
     user: {
       name: { required },
       email: { required, email },
       password: { required, minLength: minLength(6) },
       confirmPassword: { required, sameAsPassword: sameAs('password') }
     }
    },
    

    第 4 步:对按钮单击进行验证

    methods: {
      submitRegistration () {
      this.submitted = true
      this.$v.$touch()
      if (this.$v.$invalid) {
        return false // stop here if form is invalid
      } else {
        alert('Form Valid')
      }
    }
    }
    

    第五步:设计html模板

      <template>
      <div>
        <form @submit.prevent="submitRegistration" novalidate>
          <div class="form-group">
            <input type="text" class="form-control" placeholder="First Name" value="" v-model="user.name" />
            <div v-if="this.submitted && !$v.user.name.required" class="invalid-feedback left">Enter Username</div>
          </div>
          <div class="form-group">
            <input type="text" class="form-control" placeholder="Enter your company email ID" value="" v-model="user.email" autocomplete="off"/>
            <div v-if="this.submitted && $v.user.email.$error" class="invalid-feedback left">
              <span v-if="!$v.user.email.required">Email is required</span>
              <span v-if="user.email && !$v.user.email.email">Enter valid email address</span>
              <span v-if="user.email && $v.user.email.email && !$v.user.email.maxLength">Email is allowed only 30 characters</span>
            </div>
          </div>
          <div class="form-group">
            <input type="password" class="form-control" placeholder="Enter Password" value="" v-model="user.password" autocomplete="off" />
            <div v-if="this.submitted && $v.user.password.$error" class="invalid-feedback left">
              <span v-if="!$v.user.password.required">Password is required</span>
              <span v-if="user.password && !$v.user.password.minLength">Password must be minimum 6 characters</span>
            </div>
          </div>
          <div class="form-group">
            <input type="password" class="form-control"  placeholder="Confirm Password" value="" v-model="user.confirmPassword" autocomplete="off" />
            <div v-if="this.submitted && $v.user.confirmPassword.$error" class="invalid-feedback left">
              <span v-if="!$v.user.confirmPassword.required">Confirm Password is required</span>
              <span v-if="user.confirmPassword && !$v.user.confirmPassword.sameAsPassword">Password and Confirm Password should match</span>
            </div>
          </div>
          <input type="submit" class="btnRegister" value="Register" :disabled="this.isDisabled" />
        </form>
      </div>
    </template>
    

    第 6 步:在表单有效之前禁用按钮

    created () {
      this.submitted = true
      return this.$v.$touch()
    },
    computed: {
      isDisabled () {
        return this.$v.$invalid
      }
    },
    

    DEMO

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多