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 相关文章推荐
9个javascript语法高亮插件 推荐
Jul 18 Javascript
javascript权威指南 学习笔记之null和undefined
Sep 25 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
推荐一个自己用的封装好的javascript插件
Jan 29 Javascript
js实现鼠标滑过文字链接色彩变化的效果
May 06 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 Javascript
如何优雅地在vue中添加权限控制示例详解
Mar 07 Javascript
Vue项目vscode 安装eslint插件的方法(代码自动修复)
Apr 15 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 Javascript
微信小程序实现列表左右滑动
Nov 19 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和ACCESS写聊天室(八)
2006/10/09 PHP
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
yii操作session实例简介
2014/07/31 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
Python的设计模式编程入门指南
2015/04/02 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python中http请求方法库汇总
2016/01/06 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
2017/06/09 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
flask框架使用orm连接数据库的方法示例
2018/07/16 Python
python如何编写win程序
2020/06/08 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
艾滋病宣传标语
2014/06/25 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
考试作弊检讨
2015/01/27 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫