Vue + TS封装全局搜索组件

news/2024/10/18 2:26:42/

本文介绍了如何使用Vue和TypeScript封装一个全局搜索组件。该组件可以方便地在Vue项目中使用,帮助用户快速定位所需信息。

组件功能

该全局搜索组件具有以下功能:

  • 可以搜索指定数据源中的数据
  • 支持模糊搜索和精确搜索
  • 可以自定义搜索结果的展示方式
  • 支持多种搜索数据源的切换

组件实现

该组件基于Vue和TypeScript开发。首先,需要在Vue项目中安装依赖:

npm install vue-class-component vue-property-decorator --save

然后,在Vue单文件组件中定义全局搜索组件:

<template><div class="search-container"><input v-model="keyword" @input="search" /><div v-for="result in results" :key="result.id" @click="select(result)"><slot :result="result">{{ result }}</slot></div></div>
</template><script lang="ts">
import Vue from 'vue';
import { Component, Prop, Watch } from 'vue-property-decorator';@Component
export default class SearchComponent extends Vue {@Prop() data!: any[];@Prop({ default: 'id' }) keyProp!: string;@Prop({ default: 'name' }) labelProp!: string;@Prop({ default: 'name' }) searchProp!: string;@Prop({ default: true }) fuzzy!: boolean;keyword = '';results: any[] = [];search() {this.results = this.data.filter((item: any) => {const keyword = this.keyword.toLowerCase();const label = item[this.labelProp].toLowerCase();const searchValue = item[this.searchProp].toLowerCase();if (this.fuzzy) {return label.includes(keyword) || searchValue.includes(keyword);} else {return label === keyword || searchValue === keyword;}});}select(result: any) {this.keyword = result[this.labelProp];this.results = [];this.$emit('select', result);}
}
</script>

在上述代码中,我们定义了一个名为SearchComponent的Vue组件,该组件包含以下属性:

  • data:指定需要搜索的数据源
  • keyProp:指定数据源中每个数据项的唯一标识符属性名,默认为id
  • labelProp:指定数据源中每个数据项的展示名称属性名,默认为name
  • searchProp:指定数据源中每个数据项的搜索属性名,默认为name
  • fuzzy:指定是否使用模糊搜索方式,默认为true

在组件的模板中,我们使用input元素绑定了keyword属性,当用户输入关键字时触发search方法进行搜索,同时在div标签中使用v-for指令循环展示搜索结果,使用slot元素展示搜索结果的自定义展示方式。

组件使用

要使用全局搜索组件,可以在Vue单文件组件中引用该组件,然后通过data属性指定需要搜索的数据源,如:

<template><div><search-component :data="users" /></div>
</template><script lang="ts">
import Vue from 'vue';
import SearchComponent from './SearchComponent.vue';export default Vue.extend({components: {SearchComponent,},data() {return {users: [{ id: 1, name: 'Tom', email: 'tom@example.com' },{ id: 2, name: 'Jerry', email: 'jerry@example.com' },{ id: 3, name: 'Alice', email: 'alice@example.com' },{ id: 4, name: 'Bob', email: 'bob@example.com' },],};},
});
</script>

在上述代码中,我们在Vue单文件组件中引用了SearchComponent组件,并通过data属性指定了需要搜索的数据源users

总结

本文介绍了如何使用Vue和TypeScript封装一个全局搜索组件。该组件可以方便地在Vue项目中使用,帮助用户快速定位所需信息。希望本文能够对Vue开发者有所帮助。


http://www.ppmy.cn/news/662901.html

相关文章

完美世界笔试题

算法编程 思路 dp算法&#xff0c;但是题目需要多组输入&#xff0c;所以动归不是关键啦 题目的样例有误导性&#xff0c;没有负数啊。。。。 还有&#xff0c;输出最长数组就行了&#xff0c;不用输出一个数字表示长度 代码 第一题&#xff0c;88% package Alibaba;impo…

完美世界服务器维护到几点,《完美世界》官方网站

3月15日8&#xff1a;00--10&#xff1a;00&#xff0c;《完美世界》全部服务器将进行全面停机维护&#xff0c;此次更新历时2小时&#xff0c;维护后游戏版本将更新至0.9.7&#xff0c;其它具体更新内容如下&#xff1a; 1、开放占领领土获得额外双倍时间。帮派占领的领土越多…

完美世界如何修改服务器ip,完美世界:完美整容及修改身材流程

1.代码整容流程: 先打开 《完美世界》\element\userdata\character 的ini文件就可以达到~ character71.ini 为女羽灵的形象修改默认配置 character70.ini 为男羽灵的形象修改默认配置 character00.ini 为男武侠的形象修改默认配置 character10.ini 为男法师的形象修改默认配置…

完美世界服务端linux,完美世界服务端视频架设教程

完美世界服务端视频架设教程 完美世界服务端视频架设教程 系统运行库: libtask.tar.gz compat-libstdc++-33-3.2.3-61.i386.rpm pcre-7.0-2.i386.rpm (一般不用装) JASDK: java_ee_sdk-5_03-linux.bin compat-libstdc++-33-3.2.3-61.i386.rpm(JASDK装不了,装这个在装JASDK) 我是…

python+读取前端所有的js文件,从而获取前端调取后端的所有接口

读取前端所有的js文件&#xff0c;从而获取前端调取后端的所有接口&#xff0c;发送请求 import json import os import reimport pymysql import requestsclass UrlFetcher:def __init__(self, db_config, host, headers):self.db_config db_config # 数据库配置self.host …

Android的WIFI和以太网连接状态

在一些 Android 设备上同时具有以太网和Wifi网络连接 我们可以使用 ConnectivityManager 类来判断设备的网络状态。以下是一个 Kotlin 示例&#xff0c;说明了如何检查网络连接状态以及连接类型&#xff08;例如 Wi-Fi 或移动数据&#xff09;&#xff1a; 首先&#xff0c;确…

任正非:发展芯片,光砸钱不行,还要砸人

30多年前&#xff0c;硅谷在半导体芯片领域&#xff08;当时主要是半导体存储占据主流&#xff09;的发展模式主要是&#xff1a; 通过风投注入资金&#xff0c;科创企业获得注资后&#xff0c;进行持续的技术创新获得市场&#xff0c;提升公司估值&#xff0c;然后上市&#…

linux中安装openoffice

linux中安装openoffice 原创衬衫码农 最后发布于2019-04-23 13:50:44 阅读数 3425 收藏 展开 1.下载tar.gz包。下载地址&#xff1a;http://www.openoffice.org/zh-cn/ (需要下载rpm格式的) 2.通过xftp上传到linux中。我的目录在/opt/openoffice中 3.解压文件&#xff1a;tar…