如果您运行此演示并单击“在子项中修改”,则文本会更新。但是,如果您单击“通过插槽修改顶层”,则它不会被更新,并且单击它后单击其他按钮不再起作用。
如何更新插槽的顶级属性?例如布尔值或字符串。直接在孩子身上做是可行的,但我不能通过插槽来做。
如果子数据包含一个对象,我可以通过插槽修改该数据对象的子属性(在编辑之前查看此问题的原始版本以获取该演示),但我无法修改顶级属性。
const Child = {
template: `<div>
{{ object }}
<slot name="named" v-bind="object">
</slot>
<button @click="click">child</button>
</div>`,
data() {
return {
object: {
string: "initial"
}
}
},
methods: {
click() {
this.object.string = "modify in child"
}
}
}
new Vue({
components: {
Child,
},
template: `
<div class="page1">
<Child>
<template v-slot:named="slot">
<button @click="click(slot)">modify top level through slot</button>
</template>
</Child>
</div>`,
methods: {
click(slot) {
slot.string = "updated top level through slot"
}
}
}).$mount('#app')
<div id="app"></div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js"></script>