Вернуть массив значений input дочернего компонетна в родитель

Есть компонент с формой и в нее я загружаю поля в зависимости от нажатия чекбокса какой в родительском. Все работает прекрасно, но не могу понять как мне вернуть массив значение инпутов из дочерних полей в родительский компонент.

В родительском компоненте я должен получить все данные из полей какие загрузились дочерним компонентом. Понимаю, что мне $emit тут нужен, но мои пробы получения данных всегда возвращало пустой массив.

Родительствий компоненн

<template>
  <div class="auth">
    <div class="uk-container uk-text-center">
      <natification :message="natification" />
      <div class="auth-wrapper">
        <form v-on:submit.prevent="submitAuth">
          <loginFields v-show="registr !== true" />
          <registrFields  v-show="registr == true" />
          <div class="uk-margin uk-grid-small uk-child-width-auto uk-grid">
            <label>
              <input class="uk-checkbox" type="checkbox" v-model="registr" />Do you want to create account ?
            </label>
          </div>
          <button
            class="uk-button uk-button-primary"
            type="submit"
          >{{ registr ? 'Regist' : 'Login'}}</button>
        </form>
      </div>
      <div>{{info}}</div>
      <div>{{formData}}</div>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      formData: [],
      info: "",
      natification: "",
      registr: false
    };
  },
  methods: {  
      
    
  },
  components: {
    natification: () => import("../Notification/default"),
    loginFields: () => import("../Auth/_loginFields"),
    registrFields: () => import("../Auth/_registrFields")
  }
};
</script>

Дочерний компонентн

<template>
  <div>
    
    <div class="uk-margin">
      <div class="uk-inline">
        <span class="uk-form-icon" uk-icon="icon: user"></span>
        <input
          class="uk-input"
          type="text"
          name="first_name"
          v-model="formData.first_name"
          placeholder="First name"
        />
      </div>
    </div>
    
    <div class="uk-margin">
      <div class="uk-inline">
        <span class="uk-form-icon" uk-icon="icon: user"></span>
        <input
          class="uk-input"
          type="text"
          name="last_name"
          v-model="formData.last_name"
          placeholder="Last name"
        />
      </div>
    </div>

    <div class="uk-margin">
      <div class="uk-inline">
        <span class="uk-form-icon" uk-icon="icon: mail"></span>
        <input class="uk-input" type="email" v-model="formData.email" placeholder="Email address" />
      </div>
    </div>
    <div class="uk-margin">
      <div class="uk-inline">
        <span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: lock"></span>
        <input
          class="uk-input"
          type="password"
          name="password"
          v-model="formData.password"
          placeholder="Password"
        />
      </div>
    </div>
    <div class="uk-margin">
      <div class="uk-inline">
        <span class="uk-form-icon uk-form-icon-flip" uk-icon="icon: lock"></span>
        <input
          class="uk-input"
          type="password"
          name="confirm_password"
          v-model="formData.confirm_password"
          placeholder="Confirm Password"
        />
      </div>
    </div>
  </div>
</template>

<script>
export default {
  // props: ["formData"],
  data() {
    return {
      formData: []
    };
  },
  watch: {
    callbackData: () => {
      this.$emit("formDataRegistr", this.formData);
    }
  }
};
</script>


<style>
</style>

Ответы (1 шт):

Автор решения: ryzen

Вы записываете значения полей через доступ к объекту, а у вас массив, измените массив на объект.

Пример:

<script>
export default {
  data() {
    return {
      formData: {
        password: '',
        confirm_password: '',
        email: '',
        last_name: '',
        first_name: ''
      }
    };
  },
  watch: {
    callbackData: () => {
      this.$emit("formDataRegistr", this.formData);
    }
  }
};
</script>
→ Ссылка