Vue.js做select下拉列表的实例(ul-li标签仿select标签)


Posted in Javascript onMarch 02, 2018

目标:用ul-li标签结合Vue.js知识做一个模仿select标签的下拉选项列表。

知识点:

组件的写法及运用

组件之间的数据传递(props的运用)

组件之间的数据传递($emit的运用)

动态数据的绑定(v-bind)

自定义事件通信

效果图:

1、未做任何操作前,下拉列表为隐藏状态

Vue.js做select下拉列表的实例(ul-li标签仿select标签)

2、点击输入框显示下拉列表

Vue.js做select下拉列表的实例(ul-li标签仿select标签)

3、 点击列表项,输入框值跟随改变

Vue.js做select下拉列表的实例(ul-li标签仿select标签)

PS: 为了演示data1, data2两组数据的绑定,实例中创建了两个列表

Vue.js做select下拉列表的实例(ul-li标签仿select标签)

html代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>ul-li模仿select下拉菜单</title>
 <link rel="stylesheet" type="text/css" href="style.css" rel="external nofollow" />
 <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
 <div id="demo">
  <my-select btn-name='search' v-bind:list='data1' style='float: left;margin-right: 2rem;'></my-select>
  <my-select btn-name='搜索' v-bind:list='data2' style='float: left;'></my-select>
 </div>
</body>
</html>

JavaScript代码

<script type="text/javascript">
//注册全局组件
//在my-select组件中套用ul-select组件,my-select为父组件ul-select为子组件
Vue.component('my-select', {
 //组件中data要写成函数形式
 data() {
  return {
   ulShow: false, //默认ul不显示,单击input改变ul的显示状态
   selectVal: '' //选项值,input的值与选项值动态绑定
  }
 },
 //父组件向子组件通信用props
 props: ['btnName', 'list'],
 template: `
  <div id="selectWrap">
   <div class="searchBox">
    <input type="text" :value="selectVal" @click='ulShow = !ulShow'/>
    <a href="#" rel="external nofollow" class="search" v-text='btnName'></a>
   </div>
    <my-ul v-show='ulShow' v-bind:list='list' v-on:receive='changeVal'></my-ul>
   </div>
 `,
 methods: {
  changeVal(value) {
   this.selectVal = value
  }
 }
})
//子组件
Vue.component('my-ul', {
 props: ['list'],
 template: `
  <ul class="skill">
   <li v-for='item of list' v-on:click='selectLi(item)'>{{item}}</li>
  </ul>
 `,
 methods: {
  selectLi: function(item) {
   //$emit触发当前实例上的自定义事件 receive
   this.$emit('receive', item);
  }
 }
})
//创建Vue实例
new Vue({
 el: '#demo',
 //定义两组数据分别传递到两个组件的li中,两个列表的操作互不影响
 data: {
  data1: ['CSS', 'HTML', 'JavaScript'],
  data2: ['Vue.js', 'Node.js', 'Sass'],
 }
})
</script>

CSS样式

ul, li {
 margin: 0;
 padding: 0;
 list-style: none;
}
#selectWrap {
 width: 250px;
 padding: 2rem;
 background: #4682b4;
}
.searchBox input, .searchBox a {
 line-height: 1.5rem;
 height: 1.5rem;
 margin-bottom: 1rem;
 padding: 0 5px;
 vertical-align: middle;
 border: 1px solid #aaa;
 border-radius: 5px;
 outline: none;
}
.searchBox a {
 display: inline-block;
 text-decoration: none;
 background-color: #b1d85c;
}
.skill li {
 font-size: 18px;
 line-height: 2rem;
 height: 2rem;
 padding-left: 5px;
 cursor: pointer;
}
.skill li:hover {
 background-color: #008b45;
}

以上这篇Vue.js做select下拉列表的实例(ul-li标签仿select标签)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用javascript实现的仿Flash广告图片轮换效果
Apr 24 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
dess中一个简单的多路委托的实现
Jul 20 Javascript
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
JQuery选择器特辑 详细小结
May 14 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
jQuery ajax serialize() 方法使用示例
Nov 02 Javascript
JavaScript中指定函数名称的相关方法
Jun 04 Javascript
jquery图片滚动放大代码分享(1)
Aug 25 Javascript
vue组件父子间通信之综合练习(聊天室)
Nov 07 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
Apr 09 Javascript
vue element-ui table表格滚动加载方法
Mar 02 #Javascript
浅谈React组件之性能优化
Mar 02 #Javascript
vue实现裁切图片同时实现放大、缩小、旋转功能
Mar 02 #Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 #Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
Mar 02 #Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 #Javascript
详解node.js 下载图片的 2 种方式
Mar 02 #Javascript
You might like
php注入实例
2006/10/09 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
PHP编程实现阳历转换为阴历的方法实例
2017/08/08 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
angular.js+node.js实现下载图片处理详解
2017/03/31 Javascript
理解nodejs的stream和pipe机制的原理和实现
2017/08/12 NodeJs
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
JS实现简易计算器
2020/02/14 Javascript
uniapp与webview之间的相互传值的实现
2020/06/29 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
Python变量和字符串详解
2017/04/29 Python
python实现爬山算法的思路详解
2019/04/09 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
中专生职业生涯规划书范文
2014/01/10 职场文书
工厂搬迁方案
2014/05/11 职场文书
房屋转让协议书
2014/10/18 职场文书
2014年教师工作总结
2014/11/10 职场文书
写给妈妈的感谢信
2015/01/22 职场文书
联谊活动总结范文
2015/05/09 职场文书
《1942》观后感
2015/06/08 职场文书