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

Eine detaillierte Einführung in die Linux-Verzeichnisstruktur

Wenn Sie mit dem Erlernen von Linux beginnen, müs...

Analyse der MySQL-Methode zum Exportieren nach Excel

Dieser Artikel beschreibt, wie Sie MySQL zum Expo...

Kontext und Eigenschaften von React erklärt

Inhaltsverzeichnis 1. Kontext 1. Anwendungsszenar...

Einige Einstellungen von Div bezüglich Rahmen und Transparenz

rahmen: Stil = „Rahmenstil: durchgezogen; Rahmenbr...

Implementierung der Benutzerregistrierungsfunktion mit js

In diesem Artikelbeispiel wird der spezifische Co...

MySQL ruft die aktuelle Datums- und Uhrzeitfunktion ab

Holen Sie sich das aktuelle Datum + die aktuelle ...

Schaltflächen und Dropdown-Menüs für Studiennotizen in Bootstrap 3.0

Der vorherige Artikel war eine einfache Überprüfu...

So verwenden Sie SVG-Symbole in WeChat-Applets

SVG wurde in den letzten Jahren aufgrund seiner v...

Wissen Sie, welche Möglichkeiten es gibt, in Vue Routen zu überspringen?

Inhaltsverzeichnis Die erste Methode: Router-Link...