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

如何在Vuetify 3的v-text-field中使用Maska输入掩码?

Vuetify 3 结合 Maska 实现手机号掩码解决方案

问题根源在于 Vuetify 的 v-text-field 是封装后的组件,直接将 v-maska 指令绑定在组件上时,Maska 无法找到底层的原生 <input> 元素,导致掩码失效。以下提供两种可行的解决方法:

方法一:使用 Maska 组合式 API(推荐)

利用 Vue 3 的组合式 API 直接处理输入值,无需依赖指令,适配性更强:

<template>
  <v-text-field
    label="Телефон"
    variant="solo"
    class="mt-3"
    clearable
    v-model="form.phone"
    @update:model-value="handlePhoneInput"
    :error-messages="v$.form.phone.$errors.map(e => e.$message)"  
  ></v-text-field>
</template>

<script setup>
import { useMaska } from 'maska'
import { ref } from 'vue'

const form = ref({ phone: '' })
// 初始化掩码规则
const { mask } = useMaska({ mask: '+7(###)-###-##-##' })

// 处理输入值,自动应用掩码
const handlePhoneInput = (rawValue) => {
  form.value.phone = mask(rawValue)
}
</script>

方法二:通过 Ref 获取原生 Input 手动绑定掩码

如果偏好使用指令或手动初始化的方式,可以通过组件的 Ref 获取底层原生输入元素,再绑定 Maska:

<template>
  <v-text-field
    ref="phoneField"
    label="Телефон"
    variant="solo"
    class="mt-3"
    clearable
    v-model="form.phone"
    :error-messages="v$.form.phone.$errors.map(e => e.$message)"  
  ></v-text-field>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { applyMask } from 'maska'

const form = ref({ phone: '' })
const phoneField = ref(null)

onMounted(() => {
  // 定位到 v-text-field 内部的原生 input 元素
  const inputEl = phoneField.value.$el.querySelector('input')
  if (inputEl) {
    // 为原生 input 应用掩码规则
    applyMask(inputEl, { mask: '+7(###)-###-##-##' })
  }
})
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:04:55