Skip to content

useVModel

类别
导出体积
486 B
上次更改
1 hour ago
相关

简化 v-model 绑定的简写方式,将 props + emit 转换为 ref

我们鼓励你使用 Vue 的 defineModel 而不是这个组合式,然而有一些边缘情况,比如使用 TSXdeep: true 选项,defineModel 不支持。

用法

ts
import { 
useVModel
} from '@vueuse/core'
const
props
=
defineProps
<{
modelValue
: string
}>() const
emit
=
defineEmits
(['update:modelValue'])
const
data
=
useVModel
(
props
, 'modelValue',
emit
)
js
import { useVModel } from '@vueuse/core'
const props = defineProps()
const emit = defineEmits(['update:modelValue'])
const data = useVModel(props, 'modelValue', emit)

Options API

ts
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')
}, }

类型声明

显示类型声明
ts
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
} /** * Shorthand for v-model binding, props + emit -> ref * * @see https://vueuse.org/useVModel * @param props * @param key (default 'modelValue') * @param emit * @param options * * @__NO_SIDE_EFFECTS__ */ 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
]>>

源码

源码文档

贡献者

一纸忘忧

更新日志

没有最近的更新日志