基于vue实现可搜索下拉框定制组件


Posted in Javascript onMarch 26, 2020

实践加深对vue的理解和运用有效途径,本文是基于vue的可搜索下拉框定制组件实现,在此记录.

一、效果

基于vue实现可搜索下拉框定制组件

二、组件代码

dropdown.vue

<template>
 <div class="vue-dropdown default-theme" v-show-extend="show">
 <div class="search-module clearfix" v-show="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">
 <li v-for ="(item,index) in datalist" @click="appClick(item)" 
 :key="index">
 <span class="list-item-text">{{item.name}}</span>
 </li>
 </ul>
 <div class="tip__nodata" v-show="!datalist.length">{{nodatatext}}</div>
 </div>
</template>

<script>
 export default {
 data(){
 return {
 _datalist:this.itemlist.concat(),
 datalist:this.itemlist.concat(),
 length:this.itemlist.length
 }
 },
 props:{
 'show':{//用于外部控制组件的显示/隐藏
 type:Boolean,
 default:true
 },
 'itemlist':Array,
 'placeholder':String,
 'nodatatext':String
 },
 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){
 this.$emit('item-click',data);
 },
 search:function(e){
 let vm = this,searchvalue = e.currentTarget.value;
 vm.datalist = vm.$data._datalist.filter(function(item,index,arr){
  return item.name.indexOf(searchvalue) != -1;
 });
 }
 },
 mounted:function(){

 }
 }
</script>

<style lang="scss" scoped>
 .vue-dropdown.default-theme {
 position: absolute;
 left:15%;
 display: none;
 width: 70%;
 margin: 0 auto;
 margin-top: 1em;
 padding: 1em;
 z-index:10;
 box-shadow: 0px 0px 10px #ccc;
 &._self-show {
 display: block!important;
 }

 .search-module {
 position: relative;
 .search-text {
 width: 100%;
 height: 30px;
 padding-right: 2em;
 padding-left:0.5em;
 border-radius: 0.5em;
 box-shadow: none;
 border: 1px solid #ccc;

 &:focus {
  border-color: #2198f2;
 }
 }

 .search-icon {
 position: absolute;
 top: 24%;
 right: 0.5em;
 color: #aaa;
 }

 }

 .list-module {
 max-height: 200px;
 overflow-y: auto;
 li {
 &._self-hide {
  display: none;
 }
 margin-top: 0.5em;
 padding: 0.5em;
 &:hover {
  cursor:pointer;
  color: #fff;
  background: #00a0e9;

 }
 }
 }
 }
 .tip__nodata {
 font-size: 12px;
 margin-top: 1em;
 }
</style>

三、组件使用

<dropdown :itemlist="itemlist" :placeholder="placeholder" :nodatatext="nodatatext"></dropdown>

更多搜索功能实现的精彩文章,请点击专题:javascript搜索功能汇总 进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用于table内容排序
Jul 21 Javascript
js计算页面刷新的次数
Jul 20 Javascript
jQuery 常见学习网站与参考书
Nov 09 Javascript
Jquery replace 字符替换实现代码
Dec 02 Javascript
jQuery中slice()方法用法实例
Jan 07 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
Aug 17 Javascript
js实现内容显示并使用json传输数据
Mar 16 Javascript
如何在Angular.JS中接收并下载PDF
Nov 26 Javascript
JS返回顶部实例代码
Aug 09 Javascript
深入浅出webpack之externals的使用
Dec 04 Javascript
JavaScript实现缓动动画
Nov 25 Javascript
微信小程序实现购物车小功能
Dec 30 Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 #Javascript
详解创建自定义的Angular Schematics
Jun 06 #Javascript
vue组件实现进度条效果
Jun 06 #Javascript
Express的HTTP重定向到HTTPS的方法
Jun 06 #Javascript
vue组件实现可搜索下拉框扩展
Oct 23 #Javascript
微信小程序实现美团菜单
Jun 06 #Javascript
详解express + mock让前后台并行开发
Jun 06 #Javascript
You might like
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
javascript onmouseout 解决办法
2010/07/17 Javascript
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
jQuery 选择器详解
2015/01/19 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
使用Python的web.py框架实现类似Django的ORM查询的教程
2015/05/02 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
基于python 字符编码的理解
2017/09/02 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
Python3使用PyQt5制作简单的画板/手写板实例
2017/10/19 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
Python如何解除一个装饰器
2020/08/07 Python
Python 图片处理库exifread详解
2021/02/25 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
2014社区三八妇女节活动方案
2014/03/30 职场文书
公司捐款倡议书
2014/05/14 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis
分享Python异步爬取知乎热榜
2022/04/12 Python