useVModel
简化 v-model
绑定的简写方式,将 props
+ emit
转换为 ref
用法
js
import { useVModel } from '@vueuse/core'
export default {
setup(props, { emit }) {
const data = useVModel(props, 'data', emit)
console.log(data.value) // props.data
data.value = 'foo' // emit('update:data', 'foo')
},
}
<script setup>
vue
<script lang="ts" setup>
import { useVModel } from '@vueuse/core'
const props = defineProps<{
modelValue: string
}>()
const emit = defineEmits(['update:modelValue'])
const data = useVModel(props, 'modelValue', emit)
</script>
类型声明
显示类型声明
typescript
export interface UseVModelOptions<T, Passive extends boolean = false> {
/**
* 当 passive 设置为 `true` 时,将使用 `watch` 来同步 props 和 ref,
* 而不是依赖 `v-model` 或 `.sync` 来工作。
*
* @default false
*/
passive?: Passive
/**
* 当设置 eventName 时,其值将用于覆盖触发事件的名称。
*
* @default undefined
*/
eventName?: string
/**
* 尝试检查深层嵌套对象或数组中属性的变化。
* 仅在 `passive` 选项设置为 `true` 时适用
*
* @default false
*/
deep?: boolean
/**
* 当没有传入值时,为返回的 ref 定义默认值。
*
* @default undefined
*/
defaultValue?: T
/**
* 克隆 props。
* 接受自定义克隆函数。
* 当设置为 `true` 时,将使用 `JSON.parse(JSON.stringify(value))` 进行克隆。
*
* @default false
*/
clone?: boolean | CloneFn<T>
/**
* 触发 emit 事件前的钩子函数,可用于表单验证。
* 如果返回 false,则不会触发 emit 事件。
*
* @default undefined
*/
shouldEmit?: (v: T) => boolean
}
export declare function useVModel<
P extends object,
K extends keyof P,
Name extends string,
>(
props: P,
key?: K,
emit?: (name: Name, ...args: any[]) => void,
options?: UseVModelOptions<P[K], false>,
): WritableComputedRef<P[K]>
export declare function useVModel<
P extends object,
K extends keyof P,
Name extends string,
>(
props: P,
key?: K,
emit?: (name: Name, ...args: any[]) => void,
options?: UseVModelOptions<P[K], true>,
): Ref<UnwrapRef<P[K]>>
Source
贡献者
Anthony Fu
远方os
Jelf
webfansplz
Anthony Fu
motian
objectisundefined
Alex Liu
白雾三语
Eduardo Wesley
Roman Meshcheryakov
久染
chaii3
Tmk
wheat
sondh0127
Zenthae
Eduardo San Martin Morote
lstoeferle
Alex Kozack
Homyee King
Prabu Rangki
Leonidas Arvanitis
yangger