Développement de composants Vue : implémentation d'un sélecteur de liens multi-niveaux
Dans le développement front-end, le sélecteur de liens multi-niveaux est une exigence courante, comme la sélection de la province et de la ville, la sélection de l'année, du mois et du jour, etc. Cet article expliquera comment utiliser les composants Vue pour implémenter des sélecteurs de liaison multi-niveaux, avec des exemples d'implémentation de code spécifiques.
Comment implémenter un sélecteur de liens multi-niveaux ?
Pour implémenter des sélecteurs de liaison multi-niveaux, vous devez utiliser l'idée de développement de composants de Vue, qui divise un grand sélecteur en plusieurs sous-composants, responsables du rendu de chaque niveau d'options. Chaque fois que la sélection de niveau change, les options des niveaux suivants doivent être mises à jour, ce qui nécessite l'utilisation d'un mécanisme de communication entre les composants Vue.
De plus, le sélecteur doit recevoir la valeur initiale de l'extérieur et envoyer des notifications d'événements à l'extérieur lorsque la sélection change. Ceci peut être réalisé en utilisant props et $emit.
Implémentons étape par étape ce composant de sélecteur de liaison à plusieurs niveaux.
Étape 1 : Définir les sous-composants
Nous définissons d'abord le sous-composant sélecteur pour chaque niveau. Voici le code d'un sous-composant simple du sélecteur de province :
<template> <select v-model="selected"> <option value="">请选择</option> <option v-for="item in options" :value="item">{{ item }}</option> </select> </template> <script> export default { props: { options: { type: Array, required: true }, value: { type: String, default: '' } }, data() { return { selected: this.value } }, watch: { selected(newValue) { this.$emit('change', newValue) } } } </script>
Explication du code :
Étape 2 : Définir le composant parent
Ensuite, nous définissons le composant parent du sélecteur de liaison multi-niveaux. Ce composant est responsable du rendu de tous les composants enfants et de la mise à jour des options des composants enfants suivants lorsque les options changent.
Ce qui suit est le code d'un simple sélecteur de liaison à deux niveaux :
<template> <div> <CitySelect :options="provinces" v-model="selectedProvince"/> <CitySelect :options="cities" v-model="selectedCity"/> </div> </template> <script> import CitySelect from './CitySelect.vue' export default { components: { CitySelect }, data() { return { provinces: ['广东', '江苏', '浙江'], cities: { '广东': ['广州', '深圳'], '江苏': ['南京', '苏州'], '浙江': ['杭州', '宁波'] }, selectedProvince: '', selectedCity: '' } }, watch: { selectedProvince(newValue) { this.selectedCity = '' if (newValue) { this.cities = this.$data.cities[newValue] } else { this.cities = [] } } } } </script>
Explication du code :
<template> <div> <RegionSelect :options="provinces" v-model="selectedProvince"/> <RegionSelect :options="cities" v-model="selectedCity"/> <RegionSelect :options="districts" v-model="selectedDistrict"/> </div> </template> <script> import RegionSelect from './RegionSelect.vue' export default { components: { RegionSelect }, data() { return { provinces: ['广东', '江苏', '浙江'], cities: { '广东': ['广州', '深圳'], '江苏': ['南京', '苏州'], '浙江': ['杭州', '宁波'] }, districts: { '广州': ['天河区', '海珠区'], '深圳': ['福田区', '南山区'], '南京': ['玄武区', '鼓楼区'], '苏州': ['姑苏区', '相城区'], '杭州': ['上城区', '下城区'], '宁波': ['江东区', '江北区'] }, selectedProvince: '', selectedCity: '', selectedDistrict: '' } }, watch: { selectedProvince(newValue) { if (newValue) { this.cities = this.$data.cities[newValue] this.selectedCity = '' this.districts = [] } else { this.cities = [] this.districts = [] } }, selectedCity(newValue) { if (newValue) { this.districts = this.$data.districts[newValue] this.selectedDistrict = '' } else { this.districts = [] } } } } </script>
<template> <div> <RegionSelect v-model="selectedRegion"/> </div> </template> <script> import RegionSelect from './RegionSelect.vue' export default { components: { RegionSelect }, data() { return { selectedRegion: ['广东', '深圳', '南山区'] } } } </script>
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!