javascript - 如何在 Vue 向导表单中使用字段验证?

标签 javascript forms vue.js joi

example of a Vue wizard form中我尝试使用 Joi 添加表单验证。我如何从逻辑上设置它?目标是在使用 next() 方法移动到第二页和最后一页之前控制字段。由于这个向导表单的简单性,我不想更改为VueFormWizard。为了增加代码,我删除了很多字段等。

<template>
  <div>
    <div v-if="errorMessage" class="alert alert-danger" role="alert">
      {{errorMessage}}
    </div>
    <form>
      <div v-if="step ===1 ">
        <div class="form-group">
          <label for="title">Title</label>
          <input v-model="example.title"
                 type="text"
                 class="form-control"
                 id="title" />
         </div>
      <button @click.prevent="next()">Next step</button>
      </div>
      <div v-if="step === 2">
        <div class="form-group">
          <label for="userName">Email.</label>
          <input v-model="example.userName"
                 type="email"
                 class="form-control"
                 id="userName" />         
         </div>       
        <button @click.prevent="prev()">Go back</button>
        <button @click.prevent="createExample" type="submit" class="btn btn-primary">Submit</button>
      </div>
    </form>
  </div>
</template>

<script>
import Joi from 'joi'

const schema = Joi.object().keys({
  title: Joi.string().alphanum().min(2).max(40).required(),  
  userName: Joi.string().email(),
  })

export default {
  data: () => ({
    step: 1,
    errorMessage: false,
    example: {
      title: '',
      userName: ''
    }
  }),
  watch: {
    example: {
      handler () {
        this.errorMessage = ''
      },
      deep: true
    }
  },
  methods: {
    prev () {
      this.step--
    },
    next () {
      this.step++
      if (this.validUser()) {
           return false
      }
    },
    createExample () {
     // Post request
    },
    validUser () {
      const result = Joi.validate(this.huismap, schema)     
		return true
	if (result.error.message.includes('title')) {
    this.errorMessage = 'Vul een titel in van min 2 karakters'
    return false
    }
  }
}
</script>

最佳答案

如果您按如下方式设置,则可以使用浏览器验证:

<form @submit.prevent="submitMyForm">
    <input v-model="form.title" required minlength="4" maxlength="20" />

    <button type="submit">Submit</button>
</form>

现在,如果 title 为空且长度小于 4 或大于 20,您的浏览器将阻止您提交表单。

这个解决方案可以做很多事情,甚至可以进行正则表达式检查:

https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Form_validation#Validating_against_a_regular_expression

但是,这仅限于一小部分检查,并且较旧的浏览器不支持。如果您需要非常具体的验证,则必须使用自定义解决方案,此处描述 https://v2.vuejs.org/v2/cookbook/form-validation.html .

关于javascript - 如何在 Vue 向导表单中使用字段验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149339/

相关文章:

javascript - 我可以在tensorflowjs中使用强化学习吗?

javascript - 加载选中的复选框并计算它们

css - 如何将 div 单元格设置为像 th?

vue.js - 在组件内部使用时未定义 Dropzone

javascript - 如何在多个 Axios 调用上运行回退?

javascript - 一次循环十个元素

javascript - 两个脚本之间的jquery冲突

javascript - 如何在不强制的情况下添加条件文本? [101,pdf格式]

asp.net-mvc-3 - ASP.NET MVC 图像表单验证

vue.js - 拆分一个父类名并添加到每个子元素