无法让 Bootstrap-vue 表单验证工作

Posted

技术标签:

【中文标题】无法让 Bootstrap-vue 表单验证工作【英文标题】:Can't get Bootstrap-vue form validation working 【发布时间】:2020-10-03 16:47:26 【问题描述】:

我正在使用 Vue CLI 和 Bootstrap,当页面加载所有输入字段加载为无效时,当前表单验证出现问题。我可以看到为什么会发生这种情况,因为输入字段正在获得is-invalid 的类。我通过在 state prop 为 false 时将 null 值传递给它来解决此问题。默认行为似乎不应该是在页面加载时运行验证,但也许它是。我相信我按照 bootstrap-vue 文档的结构和适当的类都正确设置了。

我的代码

<b-form
            @submit.prevent="addReview"
            name="review-form"
            class="needs-validation"
            novalidate
          >
            <div class="name">
              <label class="sr-only" for="form-input-name">Name</label>
              <b-input
                id="form-input-name"
                class="form-inputs mb-2 mr-sm-2 mb-sm-0"
                v-model="name"
                placeholder="Name"
                required
                :state="isEmpty(this.name) ? true : null" <---- My problem is here
              ></b-input>
              ...
          </b-form>

我的问题是我需要这个三元组的 3 个结果,这显然是不可能的。我需要 null on load 来删除错误消息,然后 false 来显示验证错误, true 来显示有效输入。我已经为此苦苦挣扎了好几天,所以如果您想要更多代码让我知道,我们将不胜感激任何有关此设置任何方面的帮助。提交按钮添加了一个was-validated 类,它会显示与空输入相关但不验证输入的任何错误消息。

问题 如何在加载时隐藏表单错误消息的同时验证输入。

【问题讨论】:

【参考方案1】:

您不必只在 :state 属性中使用三元语句 - 您可以将 :state 直接连接到计算属性,这将实现三件事(这类似于 @ 中显示的内容) 987654321@):

    我们可以有两个以上的条件,突破三元语句的限制。 计算属性将动态分析用户输入,确保表单输入的实时验证。 我们的模板代码将更简洁、更易读(重要)。

我正在根据您的示例松散地工作,但类似以下内容应该可以解决您的问题:

<template>
  <div id="app">
    <img  src="./assets/logo.png" style="margin-bottom: 15px;">
    <b-form>
      <div class="name">
        <label class="sr-only" for="form-input- name">Name</label>
        <b-input v-model="name" id="form-input-name" :state="isNameStateValid"></b-input>
      </div>
    </b-form>
  </div>
</template>

<script>
  export default 
    name: "App",
    data() 
      return 
        name: ""
      ;
    ,
    methods: 
      isValid() 
        return this.name.length > 3 ? true : false; //your validation criteria goes here
      
    ,
    computed: 
      isNameStateValid() 
        if (this.name) 
          return this.isValid(this.name);
        
        return null;
      
    
  ;
</script>

在上面,您将有一个方法来检查您的特定验证标准(isValid、isEmpty 等)。

我们的新计算属性 isNameStateEmpty 将使用该方法的返回值,如果验证失败(触发 BootstrapVue 的验证失败状态)返回 false,验证通过则返回 true,如果 this.name 没有当前值(例如新页面加载,或用户清除输入字段,使其变为空白)。

查看此行为的工作代码框here。

由于输入的 v-model(v-bind:value 和 @change)设置为我们的“名称”数据属性,输入字段中的每个字符更改都会响应式更新我们的数据属性 (this.name)。

因为我们的 isNameStateValid 计算属性具有 this.name 的依赖关系,所以它将重新评估 this.name 数据属性的每次更改 - 确保使用 BootstrapVue 的验证状态进行实时验证。

希望对您有所帮助。

【讨论】:

感谢您的帮助,我应该能够解决这个问题,但我是 vue.js 和 bootstrap 的新手。我感谢您的帮助。我在引导文档的错误页面上。

以上是关于无法让 Bootstrap-vue 表单验证工作的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Flask 和 Bootstrap-Vue 表单文件输入从 POST 请求中获取文件

bootstrap-vue 切换扩展表行

Javascript 表单验证器功能无法正常工作

动态切换表行的可见性 - bootstrap-vue

登录、电子邮件和密码验证无法与 SQL 表 Vb 一起正常工作

CakePHP 模型验证无法正常工作