vue组件实现可搜索下拉框扩展
作者:wl_ 发布时间:2024-05-28 15:41:57
标签:vue,搜索,下拉框
本文实例为大家分享了vue组件实现可搜索下拉框的具体代码,供大家参考,具体内容如下
一、效果
二、代码
dropdown-ext.vue
<template>
<div class="vue-dropdown-ext" :class="themestyle" v-show-extend="show">
<div class="search-module clearfix" v-show="itemlist.length">
<input class="search-text" @keyup='search($event)'
:placeholder="placeholder" />
<span class="glyphicon glyphicon-search search-icon"></span>
</div>
<ul class="list-module" v-show="length" :style="{maxHeight:maxH+'px'}">
<li v-for ="(item,index) in datalist" @click="appClick(item,$event)"
:key="index" :title="item.name">
<span v-if="addIcon" :class="iconClass"></span>
:style="itemTextStyle">{{item.name}}</span>
<span v-if="statusIconType == 'text' && hasStatus"
:class="item.statusClass">{{item.statusText}}</span>
:class="item.statusClass"></span>
</li>
</ul>
<div class="tip__nodata" v-show="!length&&itemlist.length">
{{nodatatext}}
</div>
</div>
</template>
<script>
export default {
data(){
return {
datalist:[]
}
},
props:{
'show':{//用于外部控制组件的显示/隐藏
type:Boolean,
default:true
},
'itemlist':Array,
'placeholder':String,
'nodatatext':String,
'themestyle':{
type:String,
default:'default-theme'
},
'item-text-style':{
type:Object,
default:function(){
return {
width:'80%'
}
}
},
'add-icon':{
type:Boolean,
default:true
},
'icon-class':{
type:String,
default:''
},
'has-status':{
type:Boolean,
default:false
},
'status-icon-type':{
type:String,
default:'text'//text or icon
},
'max-h':{
type:Number,
default:$(window).height()-400
}
},
watch:{
itemlist:function(val){
this.datalist = val.concat();
}
},
directives:{
'show-extend':function(el,binding,vnode){//bind和 update钩子
let value = binding.value,searchInput = null;
if(value){
el.style.display='block';
}else{//隐藏后,恢复初始状态
el.style.display='none';
searchInput = el.querySelector(".search-text");
searchInput.value = '';
//还原渲染数据
vnode.context.datalist = vnode.context.itemlist;
}
}
},
methods:{
appClick:function(data,event){
this.$emit('item-click',data,event);
},
search:function(e){
let vm = this,searchvalue = e.currentTarget.value;
vm.datalist = vm.itemlist.filter(
function(item,index,arr){
return item.name.indexOf(searchvalue) != -1;
});
},
statusIconClass:function(status){
let statusClass = '';
return statusClass;
}
},
computed:{
length:function(){
return this.datalist.length;
}
}
}
</script>
<style lang="scss" scoped>
.text-overflow__style {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.vue-dropdown-ext {
.search-module { position: relative;
.search-text { width: 100%;
height: 30px;
padding-right: 2em;
padding-left:0.5em;
box-shadow: none;
border: 1px solid #ccc;
background: #fff;
&:focus { border-color: #2198f2;
}
}
.search-icon {
position: absolute;
top: 24%;
right: 0.5em;
color: #aaa;
}
}
.list-module {
overflow: auto;
li { position: relative;
margin-top: 0.5em;
padding: 0.5em;
border: 1px solid #ccc;
white-space: nowrap;
&>span { display: inline-block;
vertical-align: middle;
}
}
}
.tip__nodata {
font-size: 12px;
margin-top: 1em;
}
&.default-theme {
.list-module li { &:hover { cursor: pointer;
border-color: #00a0e9;
}
&.active {
border-color: #00a0e9;
color: #00a0e9;
}
}
}
}
</style>
来源:https://blog.csdn.net/wanglei1991gao/article/details/80579666


猜你喜欢
- 本文实例讲述了PHP设计模式之装饰器模式定义与用法。分享给大家供大家参考,具体如下:什么是装饰器模式作为一种结构型模式, 装饰器(Decor
- tempfile.TemporaryFile如何你的应用程序需要一个临时文件来存储数据,但不需要同其他程序共享,那么用TemporaryFi
- python 定时器默认定时器只执行一次,第一个参数单位S,几秒后执行import threadingdef fun_timer(): pr
- PHP中的字符串操作功能是比较多的,重要的有以下这些: (1)echo,print,printf,spr
- 大家是否经常遇到在关闭网页的时候,会看到一个确定是否离开当前页面的提示框?想一些在线测试系统、信息录入系统等就经常会有这一些提示,避免用户有
- 用于处理XML文档的DOM元素属性 childNodes:返回当前元素所有子元素的数组; firstChild:返回当前元素的第一个下级子元
- 前言所需要安装的库有:pip install opencv-pythonpip install matplotlibPython接口帮助文档
- 根据"客服果果"的"十几行的超简日历组件"http://bbs.51js.com/viewthrea
- 最近,Facebook设计团队在其位于加州帕罗奥多市(Palo Alto)的总部,提到了他们为2.5亿用户设计的原理和方法。 他们特别强调了
- 除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材。最近更新,永久图片素材新增后,将带有URL返
- 1. 解压ZIP包和配置首先,将mysql-5.5.25-winx64.zip 解压缩到D:/mysql-5.5.25 目录下,然后根据网上
- infer 这个关键字,整理记录一下,避免后面忘记了。有点难以理解呢。inferinfer 是在 typescript 2.8中新增的关键字
- os.system()在shell中执行一条命令。函数原型如下:它是最简单的调用系统应用的方式,下面是一个例子:import osimpor
- 从官网下载mysql-5.6.12-linux-glibc2.5-x86_64.tar.gz创建mysql用户[root@Master ho
- 1.自定义管理器(Manager)在语句Book.objects.all()中, objects 是一个特殊的属性,通过它来查询数
- 保证只能运行一个脚本实例,方法是程序运行时监听一个特定端口,如果失败则说明已经有实例在跑。使用装饰器实现,便于重用import functo
- ASP开发网页牢记注意事项 选择自 RAINMAN_NET&
- 春节来到,红包们大概率在微信各大群中肆虐,大家是否都一样不抢到红包们心里就感觉错过了一个亿,可总会被这事那事耽误而遗憾错过,下面用 Pyth
- blob对象介绍一个 Blob对象表示一个不可变的, 原始数据的类似文件对象。Blob表示的数据不一定是一个JavaScript原生格式 b
- pandas 对于数据分析的人员来说都是必须熟悉的第三方库,pandas 在科学计算上有很大的优势,特别是对于数据分析人员来说,相当的重要。