如何在 Vue 3 中将 props 与组件的本地数据双向绑定?
How to 2-way bind props with local data of a component in Vue 3?
谁能告诉我如何将组件的 prop 绑定到它自己的数据 属性?例如,假设我有一个名为 ModalComponent
的组件
<template> // ModalComponent.vue
<div v-if="showModal">
...
<button @click="showModal = !showModal">close the modal internally</button>
</div>
</template>
<script>
export default {
props: {
show: {
type: Boolean,
default: false
},
},
data() {
return {
showModal: false,
}
}
}
</script>
<style>
</style>
现在考虑我使用这个模态作为父组件内部的可重用组件,使用外部按钮打开模态的弹出窗口。
<template>
<button @click="showChild = !showChild">click to open modal</button>
<ModalComponent :show="showChild" />
</template>
<script>
export default {
components: {ModalComponent},
data() {
return {
showChild: false,
}
}
}
</script>
<style>
</style>
如何做到每次父级单击按钮时,通过将本地 showModal
绑定到道具 show
弹出模式?当本地关闭按钮在内部关闭模态时,如果我再次单击父按钮,它会重新弹出吗? (我正在使用 Vue 3,以防万一)
如有任何帮助,我们将不胜感激。谢谢。
这种情况的完美解决方案是使用 v-model
而不是传递 prop :
在子组件中将 modelValue
定义为 prop 并使用 $emit
函数将其值发送给父组件:
<template> // ModalComponent.vue
<div v-if="modelValue">
...
<button @click="$emit('update:modelValue',!modelValue)">close the modal internally</button>
</div>
</template>
<script>
export default {
props: {
modelValue: {
type: Boolean,
default: false
},
},
emits: ['update:modelValue'],
}
</script>
在父组件中只需使用 v-model
绑定值 :
<template>
<button @click="showChild = !showChild">click to open modal</button>
<ModalComponent v-model="showChild" />
</template>
<script>
export default {
components: {ModalComponent},
data() {
return {
showChild: false,
}
}
}
</script>
谁能告诉我如何将组件的 prop 绑定到它自己的数据 属性?例如,假设我有一个名为 ModalComponent
<template> // ModalComponent.vue
<div v-if="showModal">
...
<button @click="showModal = !showModal">close the modal internally</button>
</div>
</template>
<script>
export default {
props: {
show: {
type: Boolean,
default: false
},
},
data() {
return {
showModal: false,
}
}
}
</script>
<style>
</style>
现在考虑我使用这个模态作为父组件内部的可重用组件,使用外部按钮打开模态的弹出窗口。
<template>
<button @click="showChild = !showChild">click to open modal</button>
<ModalComponent :show="showChild" />
</template>
<script>
export default {
components: {ModalComponent},
data() {
return {
showChild: false,
}
}
}
</script>
<style>
</style>
如何做到每次父级单击按钮时,通过将本地 showModal
绑定到道具 show
弹出模式?当本地关闭按钮在内部关闭模态时,如果我再次单击父按钮,它会重新弹出吗? (我正在使用 Vue 3,以防万一)
如有任何帮助,我们将不胜感激。谢谢。
这种情况的完美解决方案是使用 v-model
而不是传递 prop :
在子组件中将 modelValue
定义为 prop 并使用 $emit
函数将其值发送给父组件:
<template> // ModalComponent.vue
<div v-if="modelValue">
...
<button @click="$emit('update:modelValue',!modelValue)">close the modal internally</button>
</div>
</template>
<script>
export default {
props: {
modelValue: {
type: Boolean,
default: false
},
},
emits: ['update:modelValue'],
}
</script>
在父组件中只需使用 v-model
绑定值 :
<template>
<button @click="showChild = !showChild">click to open modal</button>
<ModalComponent v-model="showChild" />
</template>
<script>
export default {
components: {ModalComponent},
data() {
return {
showChild: false,
}
}
}
</script>