vue.js - 在 vuetify 中打开对话框时将数据分配给字段

标签 vue.js vuejs2 vuetify.js

我使用 vuetify 创建了一个对话框,我希望它预先填充 v-select 中的数据,但当我打开对话框模式时它是空白的。我已将 propPackage 分配给 selectPackage,它在 v-selectv-model 中使用。当我打开对话框时应该如何预填充它?

对话框

<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>

父组件

<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>

最佳答案

检查我制作的代码和框:https://codesandbox.io/s/stack-70077413-943o6?file=/src/components/FormModal.vue

主要问题是您尝试直接访问数据 block 上的 prop 值:

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

在这种情况下,最好通过设置一个观察者来获取 prop 值,就像这样:

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

这样,您还可以根据需要验证 prop 值。

我在 codesanbox 中添加了一些关于您可以改进的内容的评论。由于 FormModal 组件主要用作对话框,因此您可以使用 'value' 属性并设置一个计算属性,以便能够直接从子组件关闭对话框,这样您就可以避免向父组件发出 @close 事件和 prop 突变警告。

关于vue.js - 在 vuetify 中打开对话框时将数据分配给字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70077413/

相关文章:

vue.js - nginx - 将 facebook/bots 代理到不同的服务器而不更改规范 URL

javascript - 将对象数组传递给 vue.js 中的组件

vuejs2 - vue-native 和 nativescript-vue 哪个更好?

javascript - 我是否缺少 vue 路由器转换的某些内容?

javascript - Vuetify,如何设置默认 Prop

javascript - Array prop 返回 Observer,因此无法访问 [0]

javascript - Vue如何将数据属性设置为当前路由名称的主体

Webpack 无法解析模块错误

vue.js - 在 Vuetify 中的两个图标之间留出空间

javascript - 带插槽的单元测试 Vuetify v-autocomplete