搜尋

首頁  >  問答  >  主體

VueJs 3 中的祖父組件向其祖父組件發送事件

我對 Vue 比較陌生,正在開發我的第一個專案。我正在努力創建一個包含多個子組件和孫組件的表單。我遇到了一個問題,我需要能夠產生表單的多個副本。因此,我將一些資料屬性上移了 1 級。目前,表單為ApplicationPage.Vue > TheApplication.Vue > PersonalInformation.Vue > BaseInput.Vue。我的問題是我需要透過 TheApplication 發出從 PersonalInformation 到 ApplicationPage 的變更。我很難弄清楚如何處理這種情況。我一直在尋找 Vue2 的解決方案,但沒有找到 Vue3 的解決方案。

ApplicationPage.vue

template
      <TheApplication :petOptions="petOptions"
                      :stateOptions='stateOptions'
                      v-model="data.primary"
                      applicant="Primary"/>

script
data() {
    return {
      data: {
        primary: {
          personalInformation: {
            first_name: "",
            middle_name: "",
            last_name: "",
            date_of_birth: "",
            phone: null,
            email: "",
            pets: "",
            driver_license: null,
            driver_license_state: "",
            number_of_pets: null,
            additional_comments: ""
          },
        },
      },
    }
  },

TheApplication.Vue

<personal-information :petOptions="petOptions"
                                  :stateOptions='stateOptions'
                                  :personalInformation="modelValue.personalInformation"
                                  @updateField="UpdateField"
            />
methods: {
    UpdateField(field, value) {
      this.$emit('update:modelValue', {...this.modelValue, [field]: value})
    },

個人資訊.vue

#
<base-input :value="personalInformation.first_name"
                  @change="onInput('personalInformation.first_name', $event.target.value)"
                  label="First Name*"
                  type="text" class=""
                  required/>
methods: {
    onInput(field, value) {
      console.log(field + " " + value)
      // this.$emit('updateField', { ...this.personalInformation, [field]: value })
      this.$emit('updateField', field, value)
    },
  }


#
P粉251903163P粉251903163389 天前746

全部回覆(2)我來回復

  • P粉037880905

    P粉0378809052023-11-04 14:55:06

    對於任何不想連結事件發出的人,子對像上都有父對象,它也可用於發出事件。請務必在父級中註冊發射,以避免控制台中出現警告。

    子項

    在此處呼叫直接父級的 $emit

    Child.vue

    #
    <input @input="$parent.$emit('custom-event', e.target.value) />

    或使用方法:

    <input @input="handleInput" />
    export default {
      methods: {
        handleInput(e) {
          this.$parent.$emit('custom-event', e.target.value)
        }
      }
    }

    父級

    由於是父級向祖先發出信號,因此請在此處聲明發射。對於