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应用之禁止抓屏、复制、打印
Feb 21 Javascript
json 入门基础教程 推荐
Oct 31 Javascript
javascript dom 基本操作小结
Apr 11 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
Feb 11 Javascript
javascript单引号和双引号的区别和处理
May 14 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
JS获取html元素的标记名实现方法
Oct 08 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 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冒泡排序算法的深入理解
2013/06/09 PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
python实用代码片段收集贴
2015/06/03 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
Python机器学习之SVM支持向量机
2017/12/27 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
numpy实现RNN原理实现
2021/03/02 Python
采用冷却技术的超自然舒适度:GhostBed床垫
2018/09/18 全球购物
程序员机试试题汇总
2012/03/07 面试题
工程招投标邀请书
2014/01/30 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
Nginx搭建rtmp直播服务器实现代码
2021/03/31 Servers
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python