Несколько форм с одним методом submit () от Vue

У меня есть несколько форм. У каждого из них одинаковая логика (проверка, отправка ...), поэтому я хочу создать один метод для управления действиями в моих формах. На данный момент мой код является избыточным, потому что у меня одни и те же методы onSubmit() для каждого файла .vue.

мой HTML:

<div id = "app">
    <myform-one></myform-one>
    <myform-two></myform-two>
</div>

мой JavaScript (main.js - входной файл в веб-пакете):

import Vue from 'vue';
import Myform1 from './myform1.vue';
import Myform2 from './myform2.vue';

new Vue({
    el: '#app',
    components: {
        myformOne: Myform1,
        myformTwo: Myform2
    }
});

и файлы компонентов VUE:

myform1.vue:

<template>
    <div>
        <form @submit.prevent = "onSubmit">
            <input type = "text" v-model = "fields.fname11" />
            <input type = "text" v-model = "fields.fname12" />
            <button type = "submit">submit</button>
        </form>
    </div>
</template>

<script>
    let formfields = {
        fname11: '',
        fname12: ''
    };

    export default {
        data() {
            return {
                fields: formfields
            }
        },

        methods: {
            onSubmit() {
                // code responsible for reading, validating and sending data here
                // ...
                console.info(this.fields);
            }
        },
    }
</script>

и myform2.vue:

<template>
    <div>
        <form @submit.prevent = "onSubmit">
            <input type = "text" v-model = "fields.fname21" />
            <input type = "text" v-model = "fields.fname22" />
            <input type = "text" v-model = "fields.fname23" />
            <button type = "submit">submit</button>
        </form>
    </div>
</template>

<script>
    let formfields = {
        fname21: '',
        fname22: '',
        fname23: '',
    };

    export default {
        data() {
            return {
                fields: formfields
            }
        },

        methods: {
            onSubmit() {
                // code responsible for reading, validating and sending data here
                // ...
                console.info(this.fields);
            }
        },
    }
</script>

Как я могу создать и использовать один общий метод submitForm()? А где должен быть его код (хорошая практика)?

Вам следует подавать в суд на миксины vuejs.org/v2/guide/mixins.html

Nermin 19.10.2018 09:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
1
6 017
2

Ответы 2

There are some options. My favorite is creating a mixin vue docs mixins

export const form_functionality = {
  methods: {
     on_submit() {
      //logic of submit
     },
     //here we can have other reusable methods
  }
}

Затем в ваших компонентах используйте этот миксин следующим образом:

import { form_functionality } from 'path_of_mixin'
export default {
  mixins: [form_functionality]
}

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

Итак, практически вы можете получить доступ к методу миксина, например this.on_submit().

выглядит очень хорошо, но как мне ввести данные полей формы (переменная formfields)?

Cichy 19.10.2018 10:30

Я не могу полностью понять этот случай, но вы можете отправить поля формы для отправки метода. Нравится this.on_submit(this.formFields)

roli roli 19.10.2018 10:39

Создайте отдельный файл, содержащий логику:

// submitForm.js
export default function (fields) {
   // code responsible for reading, validating and sending data here
   // ...
}

Затем используйте эту логику внутри компонентов

import submitForm from "../services/submitForm.js"
...
methods: {
  onSubmit() {
    submitForm(this.fields)
  }
}

Другие вопросы по теме