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 相关文章推荐
JS小框架 fly javascript framework
Nov 26 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
Apr 13 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
小米公司JavaScript面试题
Dec 29 Javascript
JavaScript编写推箱子游戏
Jul 07 Javascript
基于jQuery的select下拉框选择触发事件实例分析
Nov 18 Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
May 10 jQuery
js构造函数constructor和原型prototype原理与用法实例分析
Mar 02 Javascript
SpringBoot在yml配置文件中配置druid的操作
Nov 16 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中在foreach中使用foreach ($arr as &amp;$value) 这种类型的解释
2013/06/24 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
vue+canvas实现拼图小游戏
2020/09/18 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
Python中实现输入一个整数的案例
2020/05/03 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
简述安装Slackware Linux系统的过程
2012/05/08 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
表扬信格式
2014/01/12 职场文书
上班看电影检讨书
2014/02/12 职场文书
四年级学生评语大全
2014/04/21 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android