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

Vuetify中v-autocomplete是否存在“无过滤数据”对应的回调事件?

关于Vuetify v-autocomplete无匹配数据事件的解决方案

首先明确:Vuetify官方并未为v-autocomplete提供过滤后无匹配数据的内置事件,你可以通过以下两种方案实现需求:

方案1:自定义过滤逻辑(推荐,稳定不依赖内部实现)

自行实现和组件默认规则一致的过滤逻辑,手动维护过滤后的结果数组,直接判断数组长度即可捕获无数据的状态。
示例代码如下:

<template>
  <v-autocomplete
    v-model="selected"
    :items="originalOptions"
    :filter="customFilter"
    label="请选择"
  />
</template>

<script setup>
import { ref, watch } from 'vue'

const selected = ref('')
// 原始下拉选项
const originalOptions = ref(['苹果', '香蕉', '橙子', '葡萄'])
// 存储过滤后的结果
const filteredOptions = ref([])

// 自定义过滤函数,逻辑和Vuetify默认过滤规则对齐
const customFilter = (item, queryText, itemText) => {
  const searchText = queryText.toLowerCase().trim()
  const optionText = itemText.toLowerCase().trim()
  
  // 每次输入触发过滤时先清空旧的过滤结果
  if (filteredOptions.value.length > 0 && searchText !== filteredOptions.value.lastSearch) {
    filteredOptions.value = []
    filteredOptions.value.lastSearch = searchText
  }

  const isMatch = optionText.includes(searchText)
  if (isMatch) {
    filteredOptions.value.push(item)
  }
  return isMatch
}

// 监听过滤结果变化,判断是否无匹配数据
watch(filteredOptions, (newList) => {
  if (newList.length === 0 && newList.lastSearch) {
    // 此处执行无数据时的业务逻辑
    console.log('当前无可用匹配数据')
  }
}, { deep: true })
</script>

方案2:通过组件实例读取内部过滤结果(不推荐,易受版本升级影响)

你可以给v-autocomplete绑定ref,直接访问组件内部的过滤后结果属性,监听其长度即可:

  • Vuetify 2版本读取路径:$refs.yourRef.filteredItems
  • Vuetify 3版本读取路径:$refs.yourRef.vm.filteredItems

补充说明

如果你仅需要自定义无数据时的提示内容,无需额外逻辑触发,直接使用v-slot:no-data插槽即可自定义展示内容,不需要额外做事件捕获。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:39:02