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 相关文章推荐
使用Sticker.js实现贴纸效果
Jan 28 Javascript
浅谈Jquery为元素绑定事件
Apr 27 Javascript
用户代理字符串userAgent可实现的四个识别
Sep 20 Javascript
Bootstrap每天必学之响应式导航、轮播图
Apr 25 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
Dec 16 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
前端MVVM框架解析之双向绑定
Jan 24 Javascript
Vue 仿QQ左滑删除组件功能
Mar 12 Javascript
js监听html页面的上下滚动事件方法
Sep 11 Javascript
详解vue 不同环境配置不同的打包命令
Apr 07 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根据图片色界在不同位置加水印的方法
2015/07/01 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
node.js require() 源码解读
2015/12/13 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
vue+node实现图片上传及预览的示例方法
2018/11/22 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
python实现求两个字符串的最长公共子串方法
2018/07/20 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
品质主管岗位职责
2014/03/16 职场文书
新春寄语大全
2014/04/09 职场文书
个人评语大全
2014/05/04 职场文书
电子专业自荐信
2014/07/01 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers