【问题标题】:Form validation not displaying error on screen with Vuelidate使用 Vuelidate 的表单验证未在屏幕上显示错误
【发布时间】:2021-08-17 17:53:33
【问题描述】:

我正在尝试将一些使用 Vuelidate 的验证添加到登录表单中。当我将用户名字段留空时,我希望看到一条警告显示“需要名称”,但没有显示任何内容。

它没有进入下一步(这是我想要的),所以我假设验证正在工作,我只是没有在屏幕上显示消息。我在调试模式下运行它,我没有收到任何错误,是我做错了什么吗?

<template>
    <div>
        <h3>Sign in</h3>
        <div class="row" v-if="errorMessage">
            <div class="alert alert-danger"><p>{{ errorMessage }}</p></div>
        </div>
        <div class="row" v-if="successMessage">
            <div class="alert alert-success"><p>{{ successMessage }}</p></div>
        </div>
        <form @submit.prevent="OnLogin">
            <div class="form-group">
                <label for="userSigninLogin">Email</label>
                <input name="username" type="text"
                class="form-control"
                :class="{ 'is-invalid': submitted && $v.apiRequest.username.$error }"
                placeholder="Enter your email" v-model="apiRequest.username">
            </div>
            <div class="form-group">
                <label for="userSigninPassword">Password</label>
                <input name="password" type="password"
                class="form-control" id="userSigninPassword"
                placeholder="Enter your password" v-model="apiRequest.password">
            </div>
            <button type="submit" class="btn btn-primary">Sign in</button>
            <div v-if="submitted" && !$v.apiRequest.username.required
                class="alert alert-danger"><p>Name is required</p></div>
            <div class="row" v-if="submitted" && !$v.apiRequest.username.required>
              <div class="alert alert-danger"><p>Name is required</p></div>
            </div>
        </form>
    </div>
</template>

<script>
import { required, minLength } from 'vuelidate/lib/validators';

export default {
  data() {
    return {
      apiRequest: new this.$request({
        username: '',
        password: '',
      }),
      errorMessage: '',
      successMessage: '',
      submitted: false,
    };
  },
  validations: {
    apiRequest: {
      username: {
        required,
        minLength: minLength(2),
      },
    },
  },
  methods: {
    OnLogin() {
      this.submitted = true;
      this.apiRequest.addStore(this.$store);
      this.apiRequest.post('login')
        .then((response) => {
          this.successMessage = response;
          this.errorMessage = '';
        })
        .catch((errors) => {
          this.errorMessage = errors;
          this.successMessage = '';
        });
    },
  },
};
</script>

【问题讨论】:

    标签: vue.js vuelidate


    【解决方案1】:

    按照可帮助您解决问题的步骤进行操作。您忘记在按钮单击时添加验证,并且显示错误消息时出现模板错误。

    第 1 步:HTML template

    <div id="app">
      <h3>Sign in</h3>
      <div class="row" v-if="errorMessage">
        <div class="alert alert-danger">
          <p>{{ errorMessage }}</p>
        </div>
      </div>
      <div class="row" v-if="successMessage">
        <div class="alert alert-success">
          <p>{{ successMessage }}</p>
        </div>
      </div>
      <form @submit.prevent="OnLogin">
        <div class="form-group">
          <label for="userSigninLogin">Email</label>
          <input name="username"
            type="text" class="form-control" :class="{ 'is-invalid': submitted && $v.apiRequest.username.$error }"
            placeholder="Enter your email" v-model="apiRequest.username" />
          <div v-if="submitted && $v.apiRequest.username.$error" class="alert alert-danger">
            <span v-if="!$v.apiRequest.username.required">Username is Required</span>
            <span v-if="!$v.apiRequest.username.minLength">Enter Minimum 6 character</span>
            <span v-if="$v.apiRequest.username.minLength && !$v.apiRequest.username.email">Enter Valid Email address</span>
          </div>
        </div>
        <div class="form-group">
          <label for="userSigninPassword">Password</label>
          <input name="password" type="password" class="form-control"
            id="userSigninPassword" placeholder="Enter your password" v-model="apiRequest.password" />
          <div class="row" v-if="submitted && !$v.apiRequest.password.required">
            <span class="alert alert-danger">Password is required</span>
          </div>
        </div>
        <button type="submit" class="btn btn-primary">Sign in</button>
      </form>
    </div>
    

    第 2 步:初始化您的 modal 数据

    data() {
        return {
          apiRequest: {
            username: "",
            password: "",
          },
          errorMessage: "",
          successMessage: "",
          submitted: false,
        };
      },
    

    第三步:添加validations规则

    validations: {
        apiRequest: {
          username: {
            required,
            minLength: minLength(6),
            email,
          },
          password: { required },
        },
     },
    

    第四步:添加表单submit方法

    methods: {
        OnLogin() {
          this.submitted = true;
          this.$v.$touch();
          if (this.$v.$invalid) {
            return; // stop here if form is invalid
          }
          this.apiRequest
            .post("login")
            .then((response) => {
              this.successMessage = response;
              this.errorMessage = "";
            })
            .catch((errors) => {
              this.errorMessage = errors;
              this.successMessage = "";
            });
        },
      },
    

    DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 2018-04-19
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      • 2012-04-05
      • 2019-06-11
      • 1970-01-01
      相关资源
      最近更新 更多