Vue2+ElementUI下拉、Select组件的封装

Vue2+ElementUI下拉、Select组件的封装:引言

在 Vue2 项目中,ElementUI 的 el-select 组件是常用的下拉选择框组件。它提供了丰富的功能和样式,可以满足各种需求。但是,在实际开发中,我们经常会遇到一些重复性的需求,比如:

  • 需要根据不同的条件来过滤选项
  • 需要对选项进行自定义格式化
  • 需要在下拉框中添加额外的功能,比如搜索、多选等

为了提高开发效率,我们可以对 el-select 组件进行封装,将这些重复性的需求抽象成通用的功能。这样,在后续的项目中,我们就可以直接使用封装好的组件,而无需重复开发。

封装思路

封装 el-select 组件,可以从以下几个方面入手:

  • 定义 props: 首先需要定义组件的 props,用于接收外部传入的数据和配置。
  • 处理数据: 根据 props 中的数据,对选项进行过滤和格式化。
  • 渲染选项: 使用 el-option 组件渲染下拉框的选项。
  • 扩展功能: 根据需求,添加额外的功能,比如搜索、多选等。

创建组件并使用官网模版

创建组件名为:H3yunSelectCompV1,选择官网的远程搜索下拉组件。

<template><div><el-selectv-model="value"multiplefilterableremotereserve-keywordplaceholder="请输入关键词":remote-method="remoteMethod":loading="loading"><el-optionv-for="item in options":key="item.value":label="item.label":value="item.value"></el-option></el-select></div>
</template><script>
export default {name: "H3yunSelectCompV1",data() {return {options: [],value: [],list: [],loading: false,states: ["Alabama", "Alaska", "Arizona","Arkansas", "California", "Colorado","Connecticut", "Delaware", "Florida","Georgia", "Hawaii", "Idaho", "Illinois","Indiana", "Iowa", "Kansas", "Kentucky","Louisiana", "Maine", "Maryland","Massachusetts", "Michigan", "Minnesota","Mississippi", "Missouri", "Montana","Nebraska", "Nevada", "New Hampshire","New Jersey", "New Mexico", "New York","North Carolina", "North Dakota", "Ohio","Oklahoma", "Oregon", "Pennsylvania","Rhode Island", "South Carolina","South Dakota", "Tennessee", "Texas","Utah", "Vermont", "Virginia","Washington", "West Virginia", "Wisconsin","Wyoming"]}}, mounted() {this.list = this.states.map(item => {return {value: `value:${item}`, label: `label:${item}`};});},methods: {remoteMethod(query) {if (query !== '') {this.loading = true;setTimeout(() => {this.loading = false;this.options = this.list.filter(item => {return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;});}, 200);} else {this.options = [];}}}
}
</script><style scoped></style>

随便在哪个地方有用上这个组件。
在这里插入图片描述

父子组件通信

父组件给子组件传值

<H3yunSelectCompV1 :select="item"></H3yunSelectCompV1>

选择器选中的值传递到父组件,通过地址应用,因为上面父组件给子组件传递了一个对象,子组件可以直接操作对象,这个对象是父子公用的,从而实现父子通信。

1、给选择器绑定一个change事件

<el-selectv-model="value"filterableremotereserve-keywordplaceholder="请输入关键词":remote-method="remoteMethod"@change="selectChange":loading="loading"><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select>

2、在change方法里把选中值赋值到select对象里。(select对象是父组件传递过来的)

selectChange(val) {this.select.value = valconsole.log(this.select)}

上面通过控制台打印就能清楚的看到效果。

在这里插入图片描述

处理change事件

父组件加个change事件

                      <H3yunSelectCompV1:select="item"@change="handleSearch"></H3yunSelectCompV1>

在子组件里面去触发这个change事件

<el-selectv-model="value"filterableremotereserve-keyword:remote-method="remoteMethod"@change="selectChange":loading="loading"clearable><el-optionv-for="item in options":key="item":label="item":value="item"></el-option></el-select>methods: {selectChange(val) {this.select.value = val// 触发父组件的change事件this.$emit('change', val);}
}

处理远程搜索

把远程搜索的URL传进去。

             <H3yunSelectCompV1:select="item":remoteMethodUrl="tableObj.http.filterRemoteMethodUrl"@change="handleSearch"></H3yunSelectCompV1>

修改模版原先的远程搜索方法。

remoteMethod(query) {if (query !== '') {this.loading = true;// 200毫秒内有输入清除定时器if (this.timerId) {clearTimeout(this.timerId);}this.timerId = setTimeout(async () => {this.loading = false;// 访问后端接口获取选项this.options = await this.getOptions(query)}, 200);} else {this.options = [];}},async getOptions(query) {// 后端接口地址const url = this.remoteMethodUrl// 构建请求参数,param {属性名:查询值}const param = {}param[this.select.prop] = query;// request方法是封装的axios请求 - 自定义const optionsObj = await request.post(url, param)// 使用 map 筛选出属性名为 this.select.prop 的值  - 自定义,根据后端的返回值自己来定const options = optionsObj.map(item => item[this.select.prop]);return options}

效果如下

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/517519.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wps没保存关闭了怎么恢复数据?恢复文件教程

Microsoft Word是我们不可或缺的工具。很多小伙伴都遇到在WPS中编辑文件时&#xff0c;它可能会突然闪退&#xff0c;或者忘记及时保存文件就直接关闭了&#xff0c;导致我们辛苦编辑的文档丢失。面对这种情况我们该如何应对&#xff0c;尽量减小损失呢&#xff1f;接下来让我为…

Allure生成测试报告, 秒学秒会

一,安装步骤: Alluer工具包路径 在电脑系统中配置 bin 的路径 出现该页面表示安装成功 二,Java 用法 注解知识点&#xff1a; 依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0…

0基础跨考408|一战上岸复盘及经验分享

基础阶段‼️ 王道的四本书的选择题部分要都做完、订正完。 王道的四门视频课要一轮刷完&#xff08;或者题主在B站看了其他的老师&#xff0c;这其实也是算一轮的&#xff0c;只要题主是认真学习了的&#xff0c;题主说自己不知道看什么课&#xff0c;王道就好了&#xff09;…

开源爬虫技术在金融行业市场分析中的应用与实战解析

一、项目介绍 在当今信息技术飞速发展的时代&#xff0c;数据已成为企业最宝贵的资产之一。特别是在${industry}领域&#xff0c;海量数据的获取和分析对于企业洞察市场趋势、优化产品和服务至关重要。在这样的背景下&#xff0c;爬虫技术应运而生&#xff0c;它能够高效地从互…

【数据结构与算法】常见排序算法(Sorting Algorithm)

文章目录 相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希尔排序&#xff08;Shell Sort&#xff09;4. 直接选择排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…

streamlit学习-如何播放HLS视频(streamlit嵌入html)

streamlit学习-如何播放HLS视频 一.效果二.直播环境搭建(仅供演示)1.生成m3u82.搭建http服务器(支持跨域)3.验证hls(VLC播放 http://localhost:8000/playlist.m3u8) 三.streamlit demo 本文演示了streamlit如何实现hls直播[streamlit中嵌入html] 一.效果 二.直播环境搭建(仅供演…

还在使用 RESTful API ?试一试 GraphQL

前言 GraphQL 和 RESTful API 是两种不同的网络通信接口设计理念&#xff0c;它们都可以用于客户端和服务器之间的数据交换&#xff0c;但是有着不同的工作方式和特点。 各自的特点以及优缺点 GraphQL&#xff1a; 特点&#xff1a; 查询语言: GraphQL 是一个查询语言&…

喜讯丨宏电股份入选“深圳知名品牌(湾区知名品牌)”

3月5日&#xff0c;深圳知名品牌评价委员会公布第二十一届“深圳知名品牌”评审结果&#xff0c;宏电股份以在品牌知名度、市场占有率、诚信度等方面的优异成绩&#xff0c;成功入选“深圳知名品牌&#xff08;湾区知名品牌&#xff09;”。 深圳知名品牌&#xff08;湾区知名品…

Nginx启动服务

Nginx启动服务 一、启动前置 下载地址 如已安装Docker&#xff0c;下一步拉取Nginx最新的Docker镜像&#xff1a; docker pull nginx:latest查看拉取下来的镜像&#xff1a; docker images二、启动服务 创建Docker容器&#xff1a; docker run --name {projectname} -p 80…

校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序

项目描述&#xff1a; 校园小情书微信小程序源码 | 社区小程序前后端开源 | 校园表白墙交友小程序 功能介绍&#xff1a; 表白墙 卖舍友 步数旅行 步数排行榜 情侣脸 漫画脸 个人主页 私信 站内消息 今日话题 评论点赞收藏 服务器环境要求&#xff1a;PHP7.0 MySQL5.7 效果…

Java8 CompletableFuture异步编程-入门篇

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 前言 1、Future vs CompletableFuture 1.1 准备工作 1.2 Future 的局限性 …

vue ui Starting GUI 图形化配置web新项目

前言&#xff1a;在vue框架里面&#xff0c; 以往大家都是习惯用命令行 vue create 、vue init webpack创建新前端项目&#xff0c;而vue ui是一个可视化的图形界面&#xff0c;对于新手来说更加友好了&#xff0c;不但可以创建、管理、还可以更新vue项目&#xff0c;也可以下载…