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中的闭包
May 12 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 Javascript
Bootstrap基本模板的使用和理解1
Dec 14 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
Jul 26 jQuery
利用JavaScript模拟京东按键输入功能
Dec 01 Javascript
详解Vite的新体验
Feb 22 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
德生S2000电路分析
2021/03/02 无线电
带密匙的php加密解密示例分享
2014/01/29 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
JQuery的一些小应用收集
2010/03/27 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
浅谈JS中逗号运算符的用法
2016/06/12 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
JS控制TreeView的结点选择
2016/11/11 Javascript
超全面的javascript中变量命名规则
2017/02/09 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
vue结合element-ui使用示例
2019/01/24 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
python图像处理之镜像实现方法
2015/05/30 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
专升本自我鉴定
2013/10/10 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
总经理检讨书
2014/09/15 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
离职感谢信
2015/01/21 职场文书
体育活动总结
2015/02/04 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
校园广播站开场白
2015/06/01 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
HttpClient实现表单提交上传文件
2022/08/14 Java/Android