基于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 中国省市两级联动选择附图
May 14 Javascript
JavaScript处理解析JSON数据过程详解
Sep 11 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
Oct 24 Javascript
javascript:void(0)点击登录没反应怎么解决
Nov 13 Javascript
jQuery使用getJSON方法获取json数据完整示例
Sep 13 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
如何使用JS在HTML中自定义字符串格式化
Jul 20 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
微信小程序表单验证WxValidate的使用
Nov 27 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操作mysql数据库的基本类代码
2014/02/25 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
PHP代码优化技巧小结
2015/09/29 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
json2.js的初步学习与了解
2011/10/06 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
浅谈js里面的InttoStr和StrtoInt
2016/06/14 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
2017/03/23 jQuery
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
python sort、sort_index方法代码实例
2019/03/28 Python
python numpy数组复制使用实例解析
2020/01/10 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
会计专业求职信
2014/08/10 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
教师节主题班会方案
2015/08/17 职场文书
《彼得与狼》教学反思
2016/02/20 职场文书
公司会议开幕词
2016/03/03 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA