Ci-dessous, je vais partager avec vous un exemple de création d'une liste déroulante de sélection dans Vue.js (la balise ul-li imite la balise select. Elle a une bonne valeur de référence et j'espère qu'elle sera utile à tout le monde).
Objectif : utiliser la balise ul-li combinée aux connaissances de Vue.js pour créer une liste d'options déroulante qui imite la balise select.
Points de connaissances :
Comment écrire et utiliser des composants
Transfert de données entre composants (utilisation d'accessoires)
Transfert de données entre composants (utilisation de $emit)
Liaison de données dynamique (v-bind)
Communication d'événement personnalisée
Rendu :
1. Avant toute opération, la liste déroulante est masquée
2. sur la zone de saisie pour afficher la liste déroulante
3. Cliquez sur l'élément de la liste, la valeur de la zone de saisie change en conséquence
PS : Afin de démontrer la liaison de deux ensembles de données data1 et data2, deux listes sont créées dans l'exemplehtml code :
<!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> <p 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> </p> </body> </html>
Code 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: ` <p id="selectWrap"> <p class="searchBox"> <input type="text" :value="selectVal" @click='ulShow = !ulShow'/> <a href="#" rel="external nofollow" class="search" v-text='btnName'></a> </p> <my-ul v-show='ulShow' v-bind:list='list' v-on:receive='changeVal'></my-ul> </p> `, 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>
Style 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; }
Résoudre le problème de passage des paramètres dynamiques de requête dans vue-router
transfert de données vue - J'ai un spécial Compétences d'implémentation
Explication détaillée de la connexion nodejs à la base de données mysql et points de connaissances de base
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!