当前位置:Gxlcms > JavaScript > Vue.js做select下拉列表的实例(ul-li标签仿select标签)

Vue.js做select下拉列表的实例(ul-li标签仿select标签)

时间:2021-07-01 10:21:17 帮助过:3人阅读

目标:用ul-li标签结合Vue.js知识做一个模仿select标签的下拉选项列表。

知识点:

组件的写法及运用

组件之间的数据传递(props的运用)

组件之间的数据传递($emit的运用)

动态数据的绑定(v-bind)

自定义事件通信

效果图:

1、未做任何操作前,下拉列表为隐藏状态

2、点击输入框显示下拉列表

3、 点击列表项,输入框值跟随改变

PS: 为了演示data1, data2两组数据的绑定,实例中创建了两个列表

html代码:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ul-li模仿select下拉菜单</title>
  6. <link rel="stylesheet" type="text/css" href="style.css" rel="external nofollow" />
  7. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  8. </head>
  9. <body>
  10. <div id="demo">
  11. <my-select btn-name='search' v-bind:list='data1' style='float: left;margin-right: 2rem;'></my-select>
  12. <my-select btn-name='搜索' v-bind:list='data2' style='float: left;'></my-select>
  13. </div>
  14. </body>
  15. </html>

JavaScript代码

  1. <script type="text/javascript">
  2. //注册全局组件
  3. //在my-select组件中套用ul-select组件,my-select为父组件ul-select为子组件
  4. Vue.component('my-select', {
  5. //组件中data要写成函数形式
  6. data() {
  7. return {
  8. ulShow: false, //默认ul不显示,单击input改变ul的显示状态
  9. selectVal: '' //选项值,input的值与选项值动态绑定
  10. }
  11. },
  12. //父组件向子组件通信用props
  13. props: ['btnName', 'list'],
  14. template: `
  15. <div id="selectWrap">
  16. <div class="searchBox">
  17. <input type="text" :value="selectVal" @click='ulShow = !ulShow'/>
  18. <a href="#" rel="external nofollow" class="search" v-text='btnName'></a>
  19. </div>
  20. <my-ul v-show='ulShow' v-bind:list='list' v-on:receive='changeVal'></my-ul>
  21. </div>
  22. `,
  23. methods: {
  24. changeVal(value) {
  25. this.selectVal = value
  26. }
  27. }
  28. })
  29. //子组件
  30. Vue.component('my-ul', {
  31. props: ['list'],
  32. template: `
  33. <ul class="skill">
  34. <li v-for='item of list' v-on:click='selectLi(item)'>{{item}}</li>
  35. </ul>
  36. `,
  37. methods: {
  38. selectLi: function(item) {
  39. //$emit触发当前实例上的自定义事件 receive
  40. this.$emit('receive', item);
  41. }
  42. }
  43. })
  44. //创建Vue实例
  45. new Vue({
  46. el: '#demo',
  47. //定义两组数据分别传递到两个组件的li中,两个列表的操作互不影响
  48. data: {
  49. data1: ['CSS', 'HTML', 'JavaScript'],
  50. data2: ['Vue.js', 'Node.js', 'Sass'],
  51. }
  52. })
  53. </script>

CSS样式

  1. ul, li {
  2. margin: 0;
  3. padding: 0;
  4. list-style: none;
  5. }
  6. #selectWrap {
  7. width: 250px;
  8. padding: 2rem;
  9. background: #4682b4;
  10. }
  11. .searchBox input, .searchBox a {
  12. line-height: 1.5rem;
  13. height: 1.5rem;
  14. margin-bottom: 1rem;
  15. padding: 0 5px;
  16. vertical-align: middle;
  17. border: 1px solid #aaa;
  18. border-radius: 5px;
  19. outline: none;
  20. }
  21. .searchBox a {
  22. display: inline-block;
  23. text-decoration: none;
  24. background-color: #b1d85c;
  25. }
  26. .skill li {
  27. font-size: 18px;
  28. line-height: 2rem;
  29. height: 2rem;
  30. padding-left: 5px;
  31. cursor: pointer;
  32. }
  33. .skill li:hover {
  34. background-color: #008b45;
  35. }

以上这篇Vue.js做select下拉列表的实例(ul-li标签仿select标签)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

人气教程排行