如何解决如何在 vue 3 的插槽上使用 v-model?
我试图找到一种方法来使用我制作的模型组件,但能够从一个插槽关闭模型。
我可以将数据传递到插槽,但不能使用 v-model 并且不相信我可以更改插槽道具以关闭模型打开状态
https://v3.vuejs.org/guide/component-slots.html#scoped-slots
这是我正在使用的弹出框
<PopoverModal>
<template #toggleButton>
<button>A</button>
</template>
<template #modalContent="{ toggleModal }">
<div style="color: #fff; height: 400px; width: 400px;">test2 {{toggleModal}}</div>
<button @click="toggleModal = false">click me</button>
</template>
</PopoverModal>
在 popover 组件中,我试图能够发送状态变量
<slot name="modalContent" :toggleModal="showSelector"></slot>
我猜答案是不可能的,并找到另一种方法,但如果有人知道那将非常感谢
解决方法
不能直接使用模板改变 PopoverModal 数据,但可以绑定一些 setter 方法。
一些示例代码:
HelloWorld.vue
<template>
<div class="hello">
<PopoverModal>
<template #toggleButton>
<button>A</button>
</template>
<template #modalContent="modelContent">
<div style="color: #fff; height: 400px; width: 400px;">test2 {{modelContent.toggleModal}}</div>
<button @click="modelContent.setToggleModal(false)">click me</button>
</template>
</PopoverModal>
</div>
</template>
<script>
import PopoverModal from './PopoverModal'
export default {
components: {PopoverModal},name: 'HelloWorld',data () {
return {
}
}
}
</script>
PopoverModal.vue
<template>
<div>
<slot name="toggleButton"></slot>
<slot name="modalContent" :toggleModal="showSelector" :setToggleModal="setShowSelector"></slot>
</div>
</template>
<script>
export default {
data () {
return {
showSelector: true
}
},methods: {
setShowSelector(showSelector) {
this.showSelector = showSelector;
},}
}
</script>
,
如果你传递一个对象并在 v-model 中使用它的属性,它可以工作,但我认为不推荐这样做(至少在 Vue 2.x 中)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CDN en Vue 3</title>
<script src="https://unpkg.com/vue@next"></script>
</head>
<body>
<div id="app">
<child>
<template v-slot:default="props">
<h3>Slot</h3>
<p>
Object.val: <input v-model="props.data.val"> : {{props.data.val}} (binding works)
</p>
</template>
</child>
</div>
</body>
</html>
const child = {
template: `
<h3>Component</h3>
<p>
Object.val: <input v-model="data.val"> : {{data.val}} (binding works)
</p>
<hr>
<slot :data="data" :val="val"></slot>
`,data() {
return {
data: {val: 1},val: 'asd'
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。