You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue中如何检测自定义组件是否使用了v-model.number修饰符

Vue 检测自定义组件v-model.number修饰符的实现方法

Vue3 原生支持获取v-model绑定的修饰符状态,实现方式如下:

实现逻辑

Vue 规定自定义组件的v-model修饰符,会通过固定格式的props传递给组件:

  • 默认无参数的v-model,对应修饰符props名为 modelModifiers,类型为对象,存在的修饰符会以{ 修饰符名: true }的形式挂载在该对象上
  • 带参数的v-model(如v-model:count),对应修饰符props名为 [参数名]Modifiers(如countModifiers)

完整代码示例

父组件调用

<template>
  <Component v-model.number="value" />
</template>
<script setup>
import { ref } from 'vue'
import Component from './component.vue'

const value = ref(0)
</script>

自定义组件(component.vue)

<script setup>
import { onMounted } from 'vue'

// 声明接收绑定值和修饰符props
const props = defineProps({
  modelValue: [Number, String],
  modelModifiers: {
    type: Object,
    default: () => ({})
  }
})

onMounted(() => {
  // 直接判断modifiers对象上是否存在number属性即可
  if (props.modelModifiers.number) {
    console.log('Yes')
  }
})
</script>

带参数v-model的场景

如果父组件使用自定义参数的v-model:

<Component v-model:count.number="num" />

子组件对应调整props声明即可:

const props = defineProps({
  count: [Number, String],
  countModifiers: {
    type: Object,
    default: () => ({})
  }
})

// 检测修饰符
console.log(!!props.countModifiers.number)

Vue2 兼容方案

Vue2中可以通过this.$vnode.data.model?.modifiers获取修饰符对象,判断逻辑和Vue3一致:

export default {
  mounted() {
    if (this.$vnode.data.model?.modifiers?.number) {
      console.log('Yes')
    }
  }
}

内容的提问来源于stack exchange,提问作者joserick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:03