Vue realisiert kaskadierende Auswahl von Provinzen, Städten und Bezirken

Vue realisiert kaskadierende Auswahl von Provinzen, Städten und Bezirken

Vor Kurzem musste ich einen kaskadierenden Auswahleffekt für Provinzen, Städte und Bezirke implementieren. Die Daten für Provinzen, Städte und Bezirke verwenden alle lokale Daten und die Logik für die Implementierung ist etwas kompliziert. Ich werde hier die Zusammenfassung der PC-Seite auflisten, um sie zu teilen. Der Code für die mobile Seite ist ähnlich. Mit Ausnahme von HTML kann der Rest kopiert und nach Bedarf verwendet werden. Ich hoffe, das hilft Ihnen allen.

1. Rendern

Bild der PC-Nebenwirkungen:

Diagramm der Auswirkungen mobiler Endgeräte:

2. Implementierungslogik

Meine Implementierungslogik besteht hier darin, zuerst die Stadt über die Provinz und dann den Bezirk und den Landkreis über die Stadt zu erhalten. Da die Straße nicht festgelegt ist, kann der Benutzer sie selbst eingeben. Die Logik zum Abrufen des entsprechenden Stadtgebiets lautet: Jede Provinz, Stadt, jeder Bezirk und jeder Landkreis hat einen eindeutigen Code, und die ersten beiden Ziffern des Provinzcodes sind dieselben wie die Stadt, sodass die Stadt durch Abfangen herausgefiltert werden kann, und die ersten vier Ziffern des Stadtcodes sind dieselben wie die des Bezirks und des Landkreises, sodass Bezirk und Landkreis auch durch Abfangen herausgefiltert werden können.

Da ich zur Implementierung der PC-Seite die Auswahlkomponente des Element-UI-Frameworks verwendet habe, sieht die Datenstruktur der Provinzen, Städte und Bezirke wie folgt aus:

Das mobile Terminal wird mithilfe der Van-Picker-Komponente des Vant-Frameworks implementiert. Die Datenstruktur unterscheidet sich von der des PC-Terminals. Daher ist die Datenstruktur von Provinzen, Städten und Bezirken wie folgt:

3. Zugehöriger Code

<!--PC-Code-->
 <el-form :inline="true" :model="AdressFormular">
        <el-form-item label="Provinz" label-width="100px" prop="Provinz">
          <el-select v-model="addressForm.province" placeholder="Bitte auswählen" style="width:250px" @change="bindProvinceChange">
          <!-- :value="item.value+'|'+item.label" Wenn Sie sowohl die Nummer als auch den Provinznamen erhalten möchten, kann die Wertzuweisung wie folgt geschrieben und dann mit | abgeschnitten werden. Wenn Sie nicht beide benötigen, weisen Sie nur einen zu. -->
            <el-option v-for="Artikel in Provinzliste" :label="Artikel.label" :value="Artikel.value+'|'+Artikel.label"></el-option>
          </el-Auswahl>
        </el-form-item>
        <br />
        <el-form-item label="Stadt" label-width="100px" prop="Stadt">
          <el-select v-model="addressForm.city" placeholder="Bitte auswählen" style="width:250px" @change="bindCityChange">
            <el-option v-for="Artikel in Stadtliste" :label="Artikel.label" :value="Artikel.value+'|'+Artikel.label"></el-option>
          </el-Auswahl>
        </el-form-item>
        <el-form-item label="Bezirk/Landkreis" label-width="100px" prop="Landkreis">
          <el-select v-model="addressForm.county" placeholder="Bitte auswählen" style="width:250px" @change="bindCountyChange">
            <el-option v-for="Artikel in CountyList" :label="Artikel.label" :value="Artikel.value+'|'+Artikel.label"></el-option>
          </el-Auswahl>
        </el-form-item>
        <el-form-item label="Straße/Ort" label-width="100px" prop="Straße">
          <el-input type="textarea" :rows="3" resize="none" placeholder="Bitte geben Sie die Straßeninformationen ein" v-model="addressForm.street"
            Stil="Breite:250px">
          </el-Eingabe>
        </el-form-item>
</el-form>

Der Code in diesem Abschnitt ist grundsätzlich derselbe. Der einzige Unterschied besteht darin, dass das Onchange-Ereignis auf dem mobilen Endgerät die eindeutige Nummer direkt abrufen kann und es nicht wie auf der PC-Seite erforderlich ist, sie auszuschneiden. Sie können sie nach Ihren Bedürfnissen ändern.

var app = new Vue({
      el: '#app',
       Daten: {
    Adressformular: {
           Provinz: '',
           Stadt: '',
           Landkreis: '',
           Straße: ''
         },
         // Die Daten der Provinzen, Städte und Bezirke werden in einer anderen Datei abgelegt. Ich importiere die Provinzliste direkt aus einer anderen Datei: areaList.provinceList,
         Stadtliste: [],
         Landkreisliste: []
  },
  Methoden:{
   // Provinz bindProvinceChange(vals) {
         // Holen Sie sich die eindeutige Nummer, die der Provinz entspricht console.log('data========>', vals)
           lass arr = vals.split('|')
           diese.addressForm.province = arr[1]
           diese.AdressForm.Stadt = '';
           diese.AdressForm.Landkreis = '';
           diese.AdressForm.Straße = '';
           // Holen Sie sich die entsprechende Stadt this.cityList = this.addrInit(2, areaList.cityList, arr[0]);
         },
         // Stadt bindCityChange(vals) {
           console.log('Werte------->', Werte)
           diese.AdressForm.Landkreis = '';
           diese.AdressForm.Straße = '';
           lass arr = vals.split('|')
           diese.addressForm.city = arr[1]
            // Den entsprechenden Bezirk und Landkreis abrufen this.countyList = this.addrInit(4, areaList.countyList, arr[0]);
         },
         //Bezirk und Landkreis bindCountyChange(vals) {
           Konsole.log('Werte------======>', Werte)
           diese.AdressForm.Straße = '';
           lass arr = vals.split('|')
           diese.addressForm.county = arr[1]
         },
         // Konvertiere das Objekt in ein Array transArray(obj) {
           sei arr = [];
           für (lass i in obj) {
             arr.push(Objekt[i]);
           }
           Rückflug an;
         },
         /**
          * Kapselungsmethode – Holen Sie sich die entsprechende Provinz, Stadt und den Bezirk* @param {number} num Die Anzahl der abzufangenden Ziffern* @param {*} list Das abzufragende Array* @param {*} str Der abzufangende String* @returns
          */
         addrInit(Zahl, Liste, Zeichenkette) {
           Lassen Sie strSub = str.substr(0, num);
           lass arr = this.transArray(Liste);
           lass newArr = arr.filter(Funktion (Wert, Index, arr) {
             Lassen Sie newStr = val.value.substr(0, num);
             gibt newStr == strSub zurück;
           });
           gib neuesArr zurück;
         },
  }
 })

Ich hoffe, das hilft Ihnen allen! !

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Allgemeine Komponente zur Auswahl von Provinz-, Gemeinde- und Bezirksadressen basierend auf Vue+ElementUI
  • Vue implementiert die Provinz-, Stadt- und Bezirksauswahl für mobile Endgeräte
  • Vue implementiert Provinz-, Stadt- und Bezirksauswahl auf dem Mobiltelefon
  • Vue.js imitiert den Beispielcode der Auswahlkomponente der dreistufigen Verknüpfung von Provinzen, Städten und Bezirken in Jingdong
  • Implementierung der Dropdown-Auswahlkomponente mit drei Links für Provinzen, Städte und Bezirke von Vue

<<:  Fassen Sie die häufigsten Anwendungsprobleme von XHTML-Code zusammen

>>:  Docker+Nextcloud zum Erstellen eines persönlichen Cloud-Speichersystems

Artikel empfehlen

Beispielcode zur Implementierung der MySQL-Master-Slave-Replikation in Docker

Inhaltsverzeichnis 1. Übersicht 1. Grundsatz 2. U...

So erstellen Sie eine Datenbank in Navicat 8 für MySQL

Beim Entwickeln einer Website müssen Sie häufig e...

Tipps zum Mischen von OR und AND in SQL-Anweisungen

Heute gibt es eine solche Anforderung. Wenn die a...

Informationen zur ROS2-Installation und zur Verwendung der Docker-Umgebung

Inhaltsverzeichnis Warum Docker verwenden? Docker...

Installation von Docker CE auf Ubuntu

Dieser Artikel dient zur Aufzeichnung der Install...

Implementierung der Wiederaufnahme des K8S-Knotens in den Master-Cluster

1. Knoten löschen Führen Sie kubectl delete node ...

Eine kurze Erläuterung der vier häufig verwendeten Speicher-Engines in MySQL

Einführung in vier häufig verwendete MySQL-Engine...

JavaScript implementiert die umfassendste Codeanalyse einer einfachen Lupe (ES5)

In diesem Artikel wird der spezifische Code von J...

VUE + SpringBoot implementiert die Paging-Funktion

Dieser Artikel stellt hauptsächlich vor, wie pagi...