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

Vuetify中v-autocomplete组件匹配规则与样式自定义问询

解决方案

1. 修改匹配规则为开头匹配

给v-autocomplete绑定自定义过滤函数,替换默认的包含匹配逻辑,仅保留以输入字符开头的选项:

2. 调整搜索字符为加粗显示

通过自定义item插槽,重写下拉选项的渲染逻辑,将匹配的开头字符用<strong>标签包裹实现加粗。

完整代码如下:

<template>
  <div class="inspire" style="background-color:red">
    <v-app-bar style="padding: 10px 0px;"
      color="rgba(33,33,33,255)" 
      elevation="0" 
      height="64px"
    > 
      <div style="width:100%" v-if="$route.name == 'Mapping'">
        <v-autocomplete
          v-model="valuesActor"
          :items="actorArray"
          :search-input.sync="searchActor"
          :filter="startsWithFilter"
          filled
          @blur="toggleSearch"
          background-color="#313131"
          append-icon=""
          color="var(--textLightGrey)"
          :menu-props="{maxWidth: 1600}"
          placeholder="Search for actors"
          active
        >
          <!-- 自定义下拉选项模板 -->
          <template #item="{ item, attrs, on }">
            <v-list-item v-bind="attrs" v-on="on">
              <v-list-item-title v-html="formatBoldText(item)"></v-list-item-title>
            </v-list-item>
          </template>
        </v-autocomplete>
      </div>  
    </v-app-bar>
  </div>
</template>

<script>
export default {
  data() {
    return {
      valuesActor: null,
      searchActor: '',
      actorArray: [] // 你的数据源
    }
  },
  methods: {
    // 开头匹配过滤函数
    startsWithFilter(item, queryText, itemText) {
      const lowerQuery = queryText.toLowerCase()
      return itemText.toLowerCase().startsWith(lowerQuery)
    },
    // 格式化文本,匹配部分加粗
    formatBoldText(item) {
      if (!this.searchActor) return item.toString()
      
      const lowerSearch = this.searchActor.toLowerCase()
      const itemStr = item.toString()
      const lowerItem = itemStr.toLowerCase()
      
      if (!lowerItem.startsWith(lowerSearch)) return itemStr
      
      const matchLen = lowerSearch.length
      return `<strong>${itemStr.slice(0, matchLen)}</strong>${itemStr.slice(matchLen)}`
    },
    toggleSearch() {
      // 保留原方法逻辑
    }
  }
}
</script>

注意事项

  • 如果你的actorArray是对象数组(比如每个元素含name字段),需要修改itemText和formatBoldText中的取值逻辑,例如用item.name替代item。
  • 函数中统一转小写是为了实现大小写不敏感的匹配,若需要严格区分大小写,移除toLowerCase()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36