跳到內容

useVModel

類別
導出大小
486 B
上次變更
3 週前
相關

v-model 綁定的簡寫,props + emit -> ref

我們鼓勵您使用 Vue 的 defineModel 來取代這個 composable,然而,在某些邊緣情況下,例如使用 TSXdeep: true 選項時,defineModel 並不支援。

用法

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> {
  /**
   * When passive is set to `true`, it will use `watch` to sync with props and ref.
   * Instead of relying on the `v-model` or `.sync` to work.
   *
   * @default false
   */
  passive?: Passive
  /**
   * When eventName is set, it's value will be used to overwrite the emit event name.
   *
   * @default undefined
   */
  eventName?: string
  /**
   * Attempting to check for changes of properties in a deeply nested object or array.
   * Apply only when `passive` option is set to `true`
   *
   * @default false
   */
  deep?: boolean
  /**
   * Defining default value for return ref when no value is passed.
   *
   * @default undefined
   */
  defaultValue?: T
  /**
   * Clone the props.
   * Accepts a custom clone function.
   * When setting to `true`, it will use `JSON.parse(JSON.stringify(value))` to clone.
   *
   * @default false
   */
  clone?: boolean | CloneFn<T>
  /**
   * The hook before triggering the emit event can be used for form validation.
   * if false is returned, the emit event will not be triggered.
   *
   * @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]>>

原始碼

原始碼文件

貢獻者

Anthony Fu
Jelf
Anthony Fu
webfansplz
Shinigami
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

更新日誌

v12.0.0-beta.1 於 11/21/2024
0a9ed - feat!: 移除 Vue 2 支援,優化 bundle 並清理 (#4349)
v10.4.0 於 8/25/2023
48f4c - fix: 設定 clone 為 true 時觸發無限迴圈 (#3097)
v10.2.0 於 6/16/2023
7d788 - feat: 改善類型重載 (#3055)
v10.0.0-beta.5 於 4/13/2023
cb644 - refactor!: 移除 isFunction 和 isString 工具函數
v10.0.0-beta.1 於 3/23/2023
f8a53 - feat: 新增 shouldEmit hook (#2836)

根據 MIT 許可證發布。