【发布时间】:2020-03-07 18:39:48
【问题描述】:
我正在测试 vue3 并想用新版本制作一个透明的包装组件(我会经常使用的东西)。使用新语法,它应该像v-bind="attrs" 一样简单。但是,这似乎对我不起作用,并且到目前为止还没有太多文档。任何人都知道问题可能是什么?有关我如何实现它的更多详细信息,请参阅 codepen。
【问题讨论】:
标签: vue.js
我正在测试 vue3 并想用新版本制作一个透明的包装组件(我会经常使用的东西)。使用新语法,它应该像v-bind="attrs" 一样简单。但是,这似乎对我不起作用,并且到目前为止还没有太多文档。任何人都知道问题可能是什么?有关我如何实现它的更多详细信息,请参阅 codepen。
【问题讨论】:
标签: vue.js
我不知道 codepen 是否是重现此问题的好地方,因为我不知道如何进行导入 -> import { reactive } from "vue"; 所以你的 myValue 将是反应性的。
无论如何,我已经使用 <input v-model="attrs.modelValue"> 让它工作了。
这里是codepen
顺便说一句
既然你已经注册了props,你不需要在setup方法中返回它们;-)
【讨论】:
const { reactive } = Vue; 是导入所需要的,但响应式无助于解决问题。
Vue.js 3 final 的透明包装组件模式可以这样实现
<template>
<label>{{ label }}</label>
<input
type="text"
:value="modelValue"
v-bind="$attrs"
@input="$emit('update:modelValue', $event.target.value)"
/>
</template>
<script>
export default {
name: 'InputWrapper',
props: {
modelValue: {
type: String,
default: ''
},
label: {
type: String,
default: ''
}
},
emits: ['update:modelValue']
};
</script>
您可以查看一个示例以及 Vue.js 3 here 模式的另一个变体。
【讨论】: