Верификация полей формы в модальном окне bootstrap vue

106
14 июня 2021, 18:20

Есть небольшой vue проект. Использую bootstrap-vue.

По примеру prevent-closing пытаюсь сделать модальное окно с формой.

В форме несколько полей (должны быть только цифры, должны быть заполнены все).

Код:

<template>
  <div class="page">
    <div class="b-container">
      <b-button v-b-modal.modal-1>Launch demo modal</b-button>
      <b-modal
        id="modal-1"
        hide-footer
        title="Please, enter code:"
        :body-bg-variant="bodyBgVariant"
      >
        <form ref="form" @submit.stop.prevent="handleSubmit">
          <div class="pin-num text-center">
            <ul class="pin-num-list">
              <li :key="index" v-for="(item, index) in itemNum">
                <b-form-input :id="item.id" :v-model="item.name" :state="item.nameState" required></b-form-input>
              </li>
            </ul>
          </div>
          <b-button @click="handleOk" class="mt-4" variant="primary" block>Submit</b-button>
        </form>
      </b-modal>
    </div>
  </div>
</template>
<script>
export default {
  name: "AppPin",
  data() {
    return {
      pin: "",
      bodyBgVariant: "light",
      name: "",
      nameState: null,
      submittedNames: [],
      itemNum: [
        { id: "num-1", name: "", nameState: null },
        { id: "num-2", name: "", nameState: null },
        { id: "num-3", name: "", nameState: null },
        { id: "num-3", name: "", nameState: null },
        { id: "num-5", name: "", nameState: null },
        { id: "num-6", name: "", nameState: null }
      ]
    };
  },
  methods: {
    checkFormValidity() {
      console.log(this.itemNum.nameState);
      const valid = this.$refs.form.checkValidity();
      this.itemNum.nameState = valid ? "valid" : "invalid";
      return valid;
    },
    handleOk(bvModalEvt) {
      // Prevent modal from closing
      bvModalEvt.preventDefault();
      // Trigger submit handler
      this.handleSubmit();
    },
    handleSubmit() {
      // Exit when the form isn't valid
      if (!this.checkFormValidity()) {
        return;
      }
      console.log("AAAAAAAAAAAA");
      // Hide the modal manually
      this.$nextTick(() => {
        this.$refs.modal.hide();
      });
    }
  },
};
</script>

Вопрос: Как по примеру реализовать верификацию формы в модальном окне ? Если все заполнено (цифрами) , то "submit" отправляет результат и закрывает окно, если не верифицировано - не отправляется форма и не закрывается окно.

Answer 1

Надо использовать обычную валидацию формы на vue

const app = new Vue({ 
  el:'#app', 
  data:{ 
    errors:[], 
    name:null, 
    age:null, 
    movie:null 
  }, 
  methods:{ 
    checkForm:function(e) { 
      if(this.name && this.age) return true; 
      this.errors = []; 
      if(!this.name) this.errors.push("Name required."); 
      if(!this.age) this.errors.push("Age required."); 
      e.preventDefault(); 
    } 
  } 
})
input,select { 
  margin-left: 10px; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> 
<form id="app" @submit="checkForm" action="/something" method="post"> 
   
  <p v-if="errors.length"> 
    <b>Please correct the following error(s):</b> 
    <ul> 
      <li v-for="error in errors">{{ error }}</li> 
    </ul> 
  </p> 
   
  <p> 
    <label for="name">Name<label> 
    <input type="text" name="name" id="name" v-model="name"> 
  </p> 
 
  <p> 
    <label for="age">Age<label> 
    <input type="number" name="age" id="age" v-model="age" min="0"> 
  </p> 
 
  <p> 
    <label for="movie">Favorite Movie<label> 
    <select name="movie" id="movie" v-model="movie"> 
      <option>Star Wars</option> 
      <option>Vanilla Sky</option> 
      <option>Atomic Blonde</option> 
    </select> 
  </p> 
 
  <p> 
    <input type="submit" value="Submit">   
  </p> 
 
</form>

READ ALSO
Запись новых значений в JSON файл node.js

Запись новых значений в JSON файл node.js

Мне нужно добавление новых значений в JSON файл и сохранять его (и ничего большего, я много искал но всё выглядело не нужным) Просто хотелось...

108
JavaScript(jQuery) | проблема с заменой className для кнопки

JavaScript(jQuery) | проблема с заменой className для кнопки

У меня есть кнопкаЯ ей заменяю класс

116
svg miterlimit на две отдельные линии

svg miterlimit на две отдельные линии

Есть 2 линии с 4-мя точками: одна линия = 2 точки Необходимо применить один miterlimit stroke-miterlimit-svg сразу к 2-ум линиям так, как он применяется по умолчанию...

81
Выбрать элемент href в javascript&#39;е

Выбрать элемент href в javascript'е

Как выбрать элемент и при нажатии вывести alert('ok');

96