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 相关文章推荐
WordPress 照片lightbox效果的运用几点
Jun 22 Javascript
超酷的网页音乐播放器DewPlayer使用方法
Dec 18 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
jQuery toggleClass应用实例(附效果图)
Apr 06 Javascript
浅谈javascript 函数属性和方法
Jan 21 Javascript
JS实现网页上随滚动条滚动的层效果代码
Nov 04 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
讲解vue-router之命名路由和命名视图
May 28 Javascript
当vue路由变化时,改变导航栏的样式方法
Aug 22 Javascript
了解javascript中的Dom操作
May 27 Javascript
利用JavaScript将Excel转换为JSON示例代码
Jun 14 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
Jan 27 Vue.js
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中strtotime函数使用方法详解
2011/11/27 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
PHP中mysql_field_type()函数用法
2014/11/24 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
JavaScript Timer实现代码
2010/02/17 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
JS库之Highlight.js的用法详解
2017/09/13 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
2019/09/27 Javascript
Python类定义和类继承详解
2015/05/08 Python
Python迭代和迭代器详解
2016/11/10 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
python爬虫---requests库的用法详解
2020/09/28 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
美体小铺奥地利官方网站:The Body Shop奥地利
2019/04/11 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
夏季药店促销方案
2014/08/22 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
升学宴家长致辞
2015/07/27 职场文书
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
Python中itertools库的四个函数介绍
2022/04/06 Python
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技