基于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 相关文章推荐
jquery 3D 标签云示例代码
Jun 12 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 Javascript
浅谈JavaScript 浏览器对象
Jun 03 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 Javascript
打造自己的jQuery插件入门教程
Sep 23 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
Nov 09 Javascript
vue.extend实现alert模态框弹窗组件
Apr 28 Javascript
详解如何在vue项目中使用lodop打印插件
Sep 27 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
jQuery中event.target和this的区别详解
Aug 13 jQuery
详解ES6 中的Object.assign()的用法实例代码
Jan 11 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程序之die调试法 快速解决错误
2009/09/17 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
javascript模拟枚举的简单实例
2014/03/06 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
JavaScript算法学习之冒泡排序和选择排序
2019/11/02 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
一步步解析Python斗牛游戏的概率
2016/02/12 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python寻找两个有序数组的中位数实例详解
2018/12/05 Python
通过python实现弹窗广告拦截过程详解
2019/07/10 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
Python类的继承super相关原理解析
2020/10/22 Python
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
住房公积金接收函
2014/01/09 职场文书
初婚初育证明
2014/01/14 职场文书
运动会入场解说词300字
2014/01/25 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
2015年公司中秋节致辞
2015/07/31 职场文书
应收账款管理制度
2015/08/06 职场文书