基于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 相关文章推荐
AJAX使用了UpdatePanel后无法使用alert弹出脚本
Apr 02 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 Javascript
JS中生成随机数的用法及相关函数
Jan 09 Javascript
学习Angularjs分页指令
Jul 01 Javascript
解析JavaScript数组方法reduce
Dec 12 Javascript
js输入框使用正则表达式校验输入内容的实例
Feb 12 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
常见的浏览器Hack技巧整理
Jun 29 Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 Javascript
vue中使用codemirror的实例详解
Nov 01 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
vue项目中监听手机物理返回键的实现
Jan 18 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
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP开发注意事项总结
2015/02/04 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
微信支付开发发货通知实例
2016/07/12 PHP
SCP远程VPS快速搬家和WDCP升级php5.3安装memcached和eaccelerator教程
2017/07/27 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
JS动态添加option和删除option(附实例代码)
2013/04/01 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
jQuery学习笔记之jQuery构建函数的7种方法
2014/06/03 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
微信小程序吸底区域适配iPhoneX的实现
2020/04/09 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
python smtplib模块自动收发邮件功能(一)
2018/05/22 Python
解决Python print输出不换行没空格的问题
2018/11/14 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
先进德育工作者事迹材料
2014/01/24 职场文书
计算机大学生职业生涯规划书范文
2014/02/19 职场文书
廉政教育的心得体会
2014/09/01 职场文书
党员个人对照检查材料
2014/10/01 职场文书
会计岗位职责
2015/02/03 职场文书
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang