在Vue 3中,使用TypeScript对对象使用v-model
需要进行一些额外的步骤,因为Vue 3的v-model
默认情况下是为原始类型(如字符串、数字等)设计的。对于对象,你需要自定义一个v-model
的实现。
以下是如何在Vue 3和TypeScript中为对象实现v-model
的步骤:
interface MyObject {
name: string;
age: number;
}
modelValue
prop,这是Vue 3中v-model
的默认prop名称。<script lang="ts">
import { defineComponent, PropType, toRefs, watch } from 'vue';
export default defineComponent({
props: {
modelValue: {
type: Object as PropType<MyObject>,
required: true
}
},
emits: ['update:modelValue'],
setup(props, { emit }) {
const { modelValue } = toRefs(props);
// 监听对象的变化并触发更新
watch(modelValue, (newValue) => {
emit('update:modelValue', newValue);
}, { deep: true });
return {
modelValue
};
}
});
</script>
v-model
指令绑定到你的对象。<template>
<div>
<input v-model="modelValue.name" type="text">
<input v-model="modelValue.age" type="number">
</div>
</template>
v-model
绑定到一个对象。<template>
<MyComponent v-model="myObject" />
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
import MyComponent from './MyComponent.vue';
export default defineComponent({
components: {
MyComponent
},
setup() {
const myObject = ref<MyObject>({
name: 'John Doe',
age: 30
});
return {
myObject
};
}
});
</script>
这样,你就可以在Vue 3和TypeScript中使用v-model
来绑定对象了。注意,这里使用了watch
函数来监听对象的变化,并且设置了{ deep: true }
来确保即使是对象的深层属性变化也能触发更新。
领取专属 10元无门槛券
手把手带您无忧上云