el-select 1.4.x版本实现2.x.x版本的reserve-keyword功能
今天在维护以前的项目时,发现了一个小bug,其实也不算是bug,只是客户对这个控件的体验不是很满意。
我们在element 2.x.x的版本的官方文档中可以发现el-select组件的属性中比1.x.x的版本多了很多新的属性,其中的reserve-keyword属性,正好是客户想要实现的效果。
1.x.x版本的el-select标签在支持搜索和多选的情况下,输入搜索关键字,在选中一个选项后仍会保留当前的搜索关键字。这个是客户不想要的效果,而且也不能升级element的版本(怕出现其它的问题),那没办法只能改咯。
一开始我也没什么头绪,甚至还想过用css的样式去控制什么的,最终形成的效果都不是很好。实在没办法只能去看el-select组件的源码,看看能不能帮我找到灵感。
以下是我在网上找到的el-select组件的template源码:
<template>
<div>
<!-- 多选 -->
<div
v-if="multiple"
ref="tags">
<!-- collapse tags 多选时是否将选中值按文字的形式展示 -->
<span v-if="collapseTags && selected.length">
<el-tag
type="info"
disable-transitions>
<span class="el-select__tags-text">{{ selected[0].currentLabel }}</span>
</el-tag>
<el-tag
v-if="selected.length > 1"
type="info"
disable-transitions>
<span class="el-select__tags-text">+ {{ selected.length - 1 }}</span>
</el-tag>
</span>
<!-- 多选,多个 el-tag 组成 -->
<transition-group @after-leave="resetInputHeight" v-if="!collapseTags">
<el-tag
v-for="item in selected"
:key="getValueKey(item)"
type="info"
disable-transitions>
<span class="el-select__tags-text">{{ item.currentLabel }}</span>
</el-tag>
</transition-group>
<!-- 可输入文本的查询框 -->
<input
v-model="query"
v-if="filterable"
ref="input">
</div>
<!-- 显示结果框 read-only -->
<el-input
ref="reference"
v-model="selectedLabel">
<!-- 用户显示清空和向下箭头 -->
<i slot="suffix"></i>
</el-input>
<!-- 下拉菜单 -->
<transition>
<el-select-menu
ref="popper"
v-show="visible && emptyText !== false">
<el-scrollbar
tag="ul"
wrap-class="el-select-dropdown__wrap"
view-class="el-select-dropdown__list"
ref="scrollbar"
v-show="options.length > 0 && !loading">
<!-- 默认项(创建条目) -->
<el-option
:value="query"
created
v-if="showNewOption">
</el-option>
<!-- 插槽,用于放 option 和 option-group -->
<slot></slot>
</el-scrollbar>
<!-- loading 加载中文本 -->
<p
v-if="emptyText &&
(!allowCreate || loading || (allowCreate && options.length === 0 ))">
{{ emptyText }}
</p>
</el-select-menu>
</transition>
</div>
</template>
其中最重要的就是实现搜索功能的这一段代码:
<!-- 可输入文本的查询框 -->
<input v-model="query" v-if="filterable" ref="input">
可以看到搜索文本框的值其实是绑定在query的属性上,那就简单多了,我只要每次选择完下拉框选项中的某一项后,清空query属性不就行了么。以下是实现代码:
<el-select v-model="value" multiple placeholder="请选择" filterable @change="onSelectChange" ref="el-select">
<el-option label="黄金糕" value="黄金糕"></el-option>
<el-option label="龙须面" value="龙须面"></el-option>
<el-option label="北京烤鸭" value="北京烤鸭"></el-option>
</el-select>
onSelectChange() {
this.$refs['el-select'].query = '';
}
最重要的就是,取到通过vue的ref获取到el-select这个组件对象,并在el-select的change回调函数中,将query的值设为空就行了。
el-select 1.4.x版本实现2.x.x版本的reserve-keyword功能的更多相关文章
- PHP有两个不同的版本:4.x系列版本和5.x系列版本
在为用户提供动态内容方面,PHP和MySQL是一个强大的组合.这些年来,这两项产品已经跨越了它们最初的应用舞台,现在,一些世界上最繁忙的网站也在应用它们.虽然它们当初都是开源软件,只能在UNIX/Li ...
- SqlServer高版本数据本分还原到低版本方法
最近遇见一个问题: 想要将Sqlserver高版本备份的数据还原到低版本SqlServer上去,但是这在SqlServer中是没法直接还原数据库的,所以经过一系列的请教总结出来一下可用方法. 首先.你 ...
- xp硬盘安装Fedora14 过程记录及心得体会(fedora14 live版本680M 和fedora14 DVD版本3.2G的选择)
这次电脑奔溃了,奇怪的是直接ghost覆盖c盘竟然不中.之前电脑上硬盘安装的fedora14操作系统,也是双系统.不知道是不是这个问题,记得同学说过,在硬盘装fedora之后,要手动修改c盘隐藏的那个 ...
- PHP集成环境自定义设置PHP版本,同时运行多个php版本,700个PHP版本随时切换,一键开启常用模块。
本文采用我自己开发的纯绿色版WAMP环境(我将这个WAMP环境命名为PHPWAMP) (PHPWAMP默认集成VC,不需要单独安装) 那么什么是WAMP环境?WAMP这个词是什么意思? Windows ...
- idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8
问题如上面所叙: > idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8 解决方案: > Setting->Compiler->Ja ...
- 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )
初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...
- spring cloud 版本号与 boot版本之间的对应关系(版本不对,会导致pom无法引入)
版本号规则 Spring Cloud并没有熟悉的数字版本号,而是对应一个开发代号. 开发代号看似没有什么规律,但实际上首字母是有顺序的,比如:Dalston版本,我们可以简称 D 版本,对应的 Edg ...
- 如何快速切换Python运行版本,如何选择Python版本
想必在学习Python时会面临选择Python2.X或者是Python3.X的问题. 我在电脑上不同位置下载安装了不同版本 的Python,当我在学习时,不管是需要哪一个版本才能运行都无所谓,相应的快 ...
- @TargetAPI + 版本判断实现高低API版本兼容
安卓开发中,在低版本SDK使用高版本的API会报错.一般处理方法是换一种实现方法,或者在高版本SDK中使用高版本API,低版本SDK中使用效果可能会差点的折衷方案:后者可以用如下技巧来实现. 步骤 S ...
- Docker Compose 版本过高(Docker版本不匹配),降低docker-compose版本
通过docker-compose启动容器,报错: ERROR: The Docker Engine version is less than the minimum required by Compo ...
随机推荐
- 自定义npm命令行工具,并发布到www.npmjs.com
1.自定义一个npm脚本 - 1.新建一个项目(在任何路径都可以); - 2.使用`npm init -y`初始化项目 - 3.新建一个index.js文件,在文件的第一行添加 `#!/usr/bin ...
- 【C++第一个Demo】---控制台RPG游戏1【游戏简介】
经过1个月的制作和多次修改,终于有了基本雏形(此篇仅用于纪念历时3个多月C/C++学习所付出努力,也给和我一样苦恼于不能快速理解面向对象的同学们一点灵感) 在制作这个Demo过程中也受到了很多大 ...
- 74HC AHCT LS LV ABT区别
1. 含义 2. 74AHC 74AHCT 74LV 74LS 2.1 解释 AHC与AHCT均是先进的高速的CMOS器件,但是供电电压范围不同,输入的逻辑电平也不同. LV是低压版,当自身供电电压为 ...
- 动态规划及LCS
LCS的python实现: #!/usr/bin/env python #-*- coding: utf-8 -*- import sys reload(sys) sys.setdefaultenco ...
- 导数与偏导数 Derivative and Partial Derivative
之前做了很长时间“罗辑思维”的听众,罗胖子曾经讲起过,我们这一代人该如何学习.其中,就讲到我们这个岁数,已经不可能再去从头到尾的学习一门又一门工具课程了,而是在学习某一领域时,有目的的去翻阅工具课程中 ...
- Android开发之程序猿必需要懂得Android的重要设计理念
前几天去參加了带着自己的作品去參加服务外包大赛,由于签位抽到的比較靠后就等待了蛮久,就跟坐在前面的一起參赛的选手開始讨论Android的开发经验.各自给对方展示了自己的作品,小伙伴就建议我看 ...
- 【转】网站SEO优化中网站的三大标签指的是什么?
对于很多刚刚接触SEO的新手朋友来说,会经常听到别人提及网站的三大标签.那么,具体什么是网站的三大标签呢?其实网站的三大标签指的就是title.keywords.description,通俗一点也可以 ...
- elasticsearch学习笔记001
<Elasticsearch 核心技术与实战>课程Github代码 https://github.com/onebirdrocks/geektime-ELK 运行的环境: windows ...
- 1、cmd中检测远程的ip和端口是否处于监听状态
一.使用 ping 命令测试远程的ip是否可连通 cmd (右键 管理员角色) --- ping IP 二.使用 telnet 测试远程某一个ip的端口是否开放 1.为了安全起见,window ...
- fiddler增加ip以及响应时间列
最近打算看一下移动端app的响应等请求,这里打算用fillder来查看appium的模拟出发请求的操作来查看结果, 所以我们需要在左侧的面板增加我们所需要的ip,响应时间等数据以方便我们查看 fidd ...