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 时,它的值将用于覆盖 emit 事件的名称。
*
* @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
丶远方
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