Přiřazení dat do polí na otevření dialogové okno v vuetify

0

Otázka

Vytvořil jsem dialogové okno pomocí vuetify a chci, aby to předvyplní se údaje v v-vyberte, ale je to prázdné, když jsem otevřít dialogové okno modální. Jsem přidělen propPackage k selectPackage který je používán v v-model v v-select. Jak bych měl předvyplní to, když otevřu okno?

Dialogové okno

<template>
  <v-row justify="center">
    <v-dialog v-model="dialog" max-width="600px" @click:outside="close">
       <v-select
         :items="['Basic', 'Standard', 'Premium']"
          label="Package*"
          required
          v-model="selectPackage"
          ></v-select>
          <v-btn @click="close"> Close </v-btn>
    </v-dialog>
  </v-row>
</template>

<script>
export default {
  props: {
    dialog: {
      type: Boolean,
      required: false,
      default: false,
    },
    propPackage: {
      type: String,
      required: true,
    },
  },
  data: () => ({
    selectPackage: this.propPackage,
  }),
  methods: {
    close() {
      this.$emit("close");
    },
  },
};
</script>

Nadřazené součásti

<template>
 <v-btn @click="bookDialog('Basic')"></v-btn>
 <form-modal :dialog="openDialog" @close="close" :propPackage="propPackage" />
</template>
<script>
import FormModal from "@/components/FormModal.vue";
export default {
  components: {
    FormModal,
  },
  data: () => ({
    openDialog: false,
    propPackage: null,
  }),
  methods: {
    bookDialog(val) {
      this.propPackage = val;
      this.openDialog = true;
    },
    close() {
      this.openDialog = false;
    },
  },
};
</script>

vue.js vuejs2 vuetify.js
2021-11-23 08:14:30
2

Nejlepší odpověď

3

Zkontrolujte, zda tento codesandbox jsem udělal: https://codesandbox.io/s/stack-70077413-943o6?file=/src/components/FormModal.vue

Hlavní problém je, že se snažíš přistupovat k prop hodnoty přímo na vašem datovém bloku:

    data: () => ({
       selectPackage: this.propPackage,
    }),

V tomto případě by bylo lepší dostat prop hodnota nastavením watcher místo, stejně jako je tento:

    data: () => ({
      selectPackage: ''
    }),  
    watch: {
      propPackage(val) {
        // Be sure to validate default values
        if(val !== '') {
          this.selectPackage = val
        }
      }
    },

Tímto způsobem, můžete také ověřit prop hodnota, pokud budete potřebovat.

Přidal jsem pár komentářů v codesanbox na věci, které byste mohli zlepšit. Od FormModal složka funguje především jako dialogové okno, můžete použít "hodnota" prop a nastavit vypočítaný majetek, aby mohli zavřít dialogové okno přímo z podřízené složky, tímto způsobem se vyhnete vyzařují @blízko události do nadřazené složky a prop mutace varování.

2021-11-24 17:37:04
0

Vzhledem k tomu, pomocí kláves funkcí pro datový oddíl, this.propPackage bude definován od this nebude odkazovat na vue stupně. Můžete opravit, že v 2 způsoby:

  1. Změna šipky funkce ES6 zápis v dialogovém okně součásti:

    data() {
       selectPackage: this.propPackage,
    },
    
  2. Průsmyk vue instance jako parametr šipka funkce a přístup k prop pomocí:

    data: (instance) => ({
       selectPackage: instance.propPackage,
    }),
    

Jakmile si naplnit své selectPackage vlastnost data správným způsobem, vaše v-select bude naplněna hodnota, jakmile si otevřete dialogové okno.

2021-11-24 06:11:25

v podobě dialogu je namontován spolu s mateřskou složku, která je proč to není přiřazena. Jak bych to mohl vyřešit?
deadbeforesunlight

Zkoušel jsi moje řešení?
Mario Klisanic

jo nedostane přidělen vzhledem k oběma dialog a mateřská komponenta pro montáž na dom zároveň
deadbeforesunlight

kdybych přiřadit propPackage: 'Basic' v vlastnosti data pak to funguje, ale to nebude fungovat, když jsem v metody, jako je bookDialog(val){ this.propPackage=val; this.openDialog=true
deadbeforesunlight

Pokud budete chtít více pomoc, můžete se reprodukce pískoviště na codesandbox.io a budu se snažit vyřešit váš problém.
Mario Klisanic

codesandbox.io/s/svatý-hory-76qu8?file=/src/komponenty/... vytvořil tento codesandbox. říká Invalid prop: type check failed for prop "propPackage". Expected String, got Null i když jsem prošel "Základní"
deadbeforesunlight

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................