欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > el-autocomplete组件模糊查询及显示空白解决方法

el-autocomplete组件模糊查询及显示空白解决方法

2025/1/31 22:33:36 来源:https://blog.csdn.net/zhangxueyou2223/article/details/145338676  浏览:    关键词:el-autocomplete组件模糊查询及显示空白解决方法

  

el-autocomplete组件模糊查询显示空白,如图所示

原因:

下面这里是官网的部分JS代码,是因为这里只能使用restaurant.value,尽管后端传值给restaurant下是其他key的名称也不行(后端传来的只能是value,或者通过JS再处理一下)。

   createFilter(queryString) {return (restaurant) => {return (restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);};

:value-key="item.valueKey" 

valueKey就是显示的名称

 解决方案:

将结果进行处理一下,用value返回。

成功了。

扩展阅读: 

示例一:基本使用

<template><el-autocompletev-model="state":fetch-suggestions="querySearch"placeholder="请输入"trigger-on-focus></el-autocomplete>
</template><script>
export default {data() {return {state: '',dataList: [{ custom_name: '北京xxxxxx公司' },{ custom_name: '上海xxxx公司' },{ custom_name: '广州xxxx公司' },{ custom_name: '深圳xxxx公司' }]};},methods: {querySearch(queryString, cb) {var dataList = this.dataList.forEach(item=>{//必须使用valueitem.value = item.custom_name});var results = queryString ? dataList.filter(this.createFilter(queryString)) : dataList;// 调用 callback 返回建议列表的数据cb(results);},createFilter(queryString) {return (data) => {return (data.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0);};}}
};
</script>

 示例二:实现模糊匹配

为了让 el-autocomplete 支持模糊匹配,我们需要修改 createFilter 函数。

createFilter(queryString) {return (data) => {return data.value.toLowerCase().includes(queryString.toLowerCase());};
}

通过将 indexOf 替换为 includes 方法,我们现在可以实现部分匹配。

示例三:优化搜索体验

为了提供更好的用户体验,我们可以增加一些额外的功能,比如搜索高亮、最近搜索记录等。

methods: {createFilter(queryString) {return (data) => {const lowerCaseQuery = queryString.toLowerCase();const lowerCaseCity = data.value.toLowerCase();return lowerCaseCity.includes(lowerCaseQuery);};},highlightMatch(term, query) {const regExp = new RegExp(query, 'gi');return term.replace(regExp, '<strong>$&</strong>');}
},

在 el-autocomplete 的模板中,我们可以使用这个方法来高亮匹配的部分。

<template><el-autocompletev-model="state":fetch-suggestions="querySearch"placeholder="请输入"trigger-on-focus><template slot-scope="{ item }"><span v-html="highlightMatch(item.value, state)"></span></template></el-autocomplete>
</template>

示例四:使用第三方库

对于更复杂的模糊搜索需求,可以考虑使用像 Fuse.js 这样的第三方库,它提供了一种简单的方式来执行模糊搜索。

import Fuse from 'fuse.js';const options = {shouldSort: true,threshold: 0.6,location: 0,distance: 100,maxPatternLength: 32,minMatchCharLength: 1,keys: ['value']
};this.fuse = new Fuse(this.dataList, options);methods: {querySearch(queryString, cb) {const results = this.fuse.search(queryString);cb(results.map(result => result.item));}
}

通过这种方式,我们可以获得更精确的模糊搜索结果。

示例五:结合Vuex存储搜索历史

为了保持搜索记录,我们可以使用 Vuex 来存储最近的搜索历史。

import { mapState, mapMutations } from 'vuex';export default {computed: {...mapState(['searchHistory'])},methods: {...mapMutations(['addSearchHistory']),onInput(value) {this.addSearchHistory(value);}},created() {this.$store.dispatch('loadSearchHistory');}
};

然后,在 Vuex store 中定义相应的 actions 和 mutations 来处理搜索历史的保存和加载。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com