VueJS 从子项更改 v-model 变量

VueJS change v-model variable from child

我正在尝试通过父组件更改组件的 v-model,但我没有得到。

在父组件中我有一个 showProgress 变量,当我将它更改为 true 时我想要它 v-model <progress-modal> 切换到 true.

ProgressModal.vue

<template>
    <v-dialog v-model="show" persistent max-width="400">
        <v-card :dark="($theme === 'dark')">
            <v-card-title class="headline" v-text="title"></v-card-title>
            <v-divider></v-divider>
            <div class="text-xs-center mt-2">
                <v-progress-circular indeterminate :size="100" :color="$color"></v-progress-circular>
                <v-card-text v-text="text"></v-card-text>
            </div>
        </v-card>
    </v-dialog>
</template>

<script>
    export default {
        name: 'progress-modal',
        props: ['title', 'text'],
        data: () => ({
            show: true
        }),
        methods: {

        }
    }
</script>

我已经尝试使用

<progress-modal v-model="showProgress">

而不是 v-dialog 中的 v-model 但它不起作用 :(

要让父级使用 v-model,您必须在子级中定义一个 value 属性并使用它。

<template>
    <v-dialog v-model="value" persistent max-width="400">

...
</template>
<script>
    export default {
        name: 'progress-modal',
        props: ['title', 'text', 'value'], // added 'value'
        data: () => ({
...
</script>

这样,当你使用:

<progress-modal v-model="showProgress">

...progress-modal 中的 value 将具有父级 showProgress 的值。


将其命名为 show

要使用其他内部名称而不是 value,您可以在组件中 declare the model option

<template>
    <v-dialog v-model="show" persistent max-width="400">

...
</template>
<script>
    export default {
        name: 'progress-modal',
        props: ['title', 'text', 'show'],    // added 'show'
        model: {                             // added model option
          prop: 'show'                       //
        },                                   //
        data: () => ({
        }),                                  // in this case, remove show from data
...
</script>

value 属性作为 value 传递给 v-dialog 组件,并从 v-dialog 组件输入 re-emit:

//CustomDialog.vue
<v-dialog :value="value" @input="$emit('input', $event)">

</v-dialog>
...
props:['value']

并将 v-model 添加到您的父项(自定义对话框)

//Parent.vue
<custom-dialog v-model="showProgress">

Example