Installations- und Verwendungsschritte für vue-amap

Installations- und Verwendungsschritte für vue-amap

Ich habe zuvor die Verwendung des asynchronen Ladens der Amap-API erläutert. Jetzt werde ich die Verwendung von vue-amap aufzeichnen.

vue-amap ist eine Open-Source-Kartenkomponente basierend auf Vue 2.0 und Amap, entwickelt von Ele.me. Der Datenstatus ist einseitig an den Kartenstatus gebunden, und Entwickler müssen sich nicht um die spezifischen Vorgänge der Karte kümmern.

Offizielle Dokumentation: https://elemefe.github.io/vue-amap/

Hier sind die Schritte:

1. npm-Installation

npm installiere vue-amap --save

Wenn Sie CDN verwenden, können Sie derzeit die neueste Version der Ressourcen über unpkg.com/vue-amap beziehen.

<script src="https://unpkg.com/vue-amap/dist/index.js"></script>

2. Anwendungsfall

Beschreibung der Instanzanforderungen: Suchen und wählen Sie eine Adresse aus. Nach der Auswahl lokalisiert die Karte die Adresse, ermittelt Längen- und Breitengrad und trägt diese automatisch in das Eingabefeld unten ein.

Hinweis: Das im Beispiel verwendete Framework ist ElementUI und seine Formularkomponenten sind relativ einfach zu verwenden.

Implementierungsschritte:

(1) Nach der Installation stellen Sie in main.js Folgendes ein:

importiere VueAMap von „vue-amap“;
Vue.use(VueAMap);
// vue-amap initialisieren
VueAMap.initAMapApiLoader({
  key: "dein Schlüssel", //Schreibe hier den Schlüssel der Amap, für die du dich beworben hast
  Plugin: ["AMap.Autocomplete", "AMap.Geocoder", "AMap.Geolocation"],
  Version: "1.4.15",
  uiVersion: "1.1"
});

(2) Definieren Sie die Kartensuchkomponente base/mapSearch/baseMapSearch.vue

<Vorlage>
  <div>
    <div Klasse="Suchfeld">
      <el-Eingabe
        v-model="Suchschlüssel"
        Typ="Suche"
        id="Suche"
        Platzhalter="Bitte geben Sie die genaue Adresse ein"
      ></el-Eingabe>
      <!--<button @click="searchByHand">Suchen</button>-->
      <div Klasse="tip-box" id="searchTip"></div>
    </div>
    <!--
      amap-manager: Kartenverwaltungsobjekt vid: ID des Kartencontainerknotens
      zooms: Der Zoomstufenbereich der Kartenanzeige. Auf dem PC ist der Standardbereich [3,18] und der Wertebereich [3-18]. Auf Mobilgeräten ist der Standardbereich [3-19] und der Wertebereich [3-19].
      center: Koordinatenwert des Mittelpunkts der Karte plugin: von der Karte verwendetes Plugin events: events -->
    <div Klasse="amap-box">
      <el-amap
        :amap-manager="amapManager"
        :vid="'amap-vue'"
        :zoom="Zoom"
        :plugin="Plugin"
        :mitte="Mitte"
        :events="Ereignisse"
      >
        <!-- Tags -->
        <el-amap-marker
          v-for="(Markierung, Index) in Markierungen"
          :position="Markierung"
          :Schlüssel="Index"
        ></el-amap-marker>
      </el-amap>
    </div>
  </div>
</Vorlage>
<Skript>
importiere { AMapManager, lazyAMapApiLoaderInstance } von „vue-amap“;
let amapManager = neuer AMapManager();
Standard exportieren {
  Requisiten: ["Stadt", "Wert", "Längengrad", "Breitengrad", "isEdit"],
  Daten() {
    lass self = dies;
    zurückkehren {
      Adresse: null,
      Suchbegriff: "",
      amapManager,
      Markierungen: [],
      Suchoption: {
        Stadt: diese.Stadt ? diese.Stadt : "National",
        Stadtgrenze: wahr
      },
      Mitte: [121.329402, 31.228667],
      Zoom: 17,
      Länge: 0,
      Breite: 0,
      geladen: falsch,
      Ereignisse: {
        init() {
          lazyAMapApiLoaderInstance.load().then(() => {
            self.initSearch();
          });
        },
        // Klicken Sie hier um die Adressdaten abzurufen click(e) {
          selbst.marker = [];
          lass { lng, lat } = e.lnglat;
          selbst.lng = lng;
          selbst.lat = lat;
          selbst.Mitte = [Länge, Breite];
          selbst.Markierungen.drücken([lng, lat]);
          // Dies erfolgt über das Amap SDK.
          let geocoder = new AMap.Geocoder({
            Radius: 1000,
            Erweiterungen: „alle“
          });
          geocoder.getAddress([lng, lat], Funktion(Status, Ergebnis) {
            if (status === "abgeschlossen" && result.info === "OK") {
              if (Ergebnis && Ergebnis.regeocode) {
                selbst.Adresse = Ergebnis.regeocode.formatierteAdresse;
                self.Suchschlüssel = Ergebnis.Regeocode.formatierteAdresse;
                self.$emit("updateLocation", Länge, Breite, self.Suchschlüssel);
                selbst.$nächsterTick();
              }
            }
          });
        }
      },
      // Einige Tool-Plugins Plugin: [
        {
          // Position pName: "Geolokalisierung",
          Ereignisse: {
            init(o) {
              // o ist die Instanz des Amap-Positionierungs-Plugins o.getCurrentPosition((status, result) => {
                if (Ergebnis && Ergebnis.Position) {
                  wenn (selbst.istBearbeiten) {
                    // Längengrad festlegen self.lng = self.longitude;
                    //Dimension festlegen self.lat = self.latitude;
                    // Koordinaten festlegen self.center = [self.longitude, self.latitude];
                    self.markers.push([selbst.Länge, selbst.Breitengrad]);
                  } anders {
                    // Längengrad festlegen self.lng = result.position.lng;
                    //Dimension festlegen self.lat = result.position.lat;
                    // Koordinaten festlegen self.center = [self.lng, self.lat];
                    self.markers.push([self.lng, self.lat]);
                  }
                  // laden
                  selbst geladen = wahr;
                  //Nachdem die Seite gerendert wurde self.$nextTick();
                }
              });
            }
          }
        }
      ]
    };
  },
  erstellt() {
    wenn (dieser.Wert) {
      dieser.Suchschlüssel = dieser.Wert;
      diese.Adresse = dieser.Wert;
    }
    wenn (diese.Länge && diese.Breite) {
      dies.lng = dies.Längengrad;
      dies.lat = diese.Breitengrad;
      dieses.Zentrum = [diese.Länge, diese.Breite];
      dies.markers.push([diese.Länge, diese.Breite]);
    }
  },
  Methoden: {
    // Nach Auswahl einer Adresse automatisch in der Nähe der aktuellen Adresse lokalisieren updateAddress(value, longitude, latitude) {
      this.searchKey = Wert;
      diese.Adresse = Wert;
      this.lng = Längengrad;
      this.lat = Breitengrad;
      this.center = [Längengrad, Breitengrad];
      this.markers.push([Längengrad, Breitengrad]);
    },
    initSearch() {
      lass vm = dies;
      lass map = this.amapManager.getMap();
      AMapUI.loadUI(["misc/PoiPicker"], Funktion(PoiPicker) {
        let poiPicker = neuer PoiPicker({
          Eingabe: "Suche",
          OrtSuchoptionen: {
            Karte: Karte,
            Seitengröße: 10
          },
          suggestContainer: "Suchtipp",
          searchResultsContainer: "Suchtipp"
        });
        vm.poiPicker = poiPicker;
        // Auf Informationen zum ausgewählten POI warten poiPicker.on("poiPicked", function(poiResult) {
          Lassen Sie Quelle = poiResult.source;
          lass poi = poiResult.item;
          wenn (Quelle !== "Suche") {
            poiPicker.searchByKeyword(poi.name);
          } anders {
            poiPicker.clearSearchResults();
            vm.marker = [];
            sei lng = poi.location.lng;
            lass lat = poi.location.lat;
            let Adresse = poi.name; // poi.Stadtname + poi.Anzeigenname + poi.name
            vm.center = [Länge, Breite];
            vm.markers.push([lng, lat]);
            vm.lng = lng;
            vm.lat = lat;
            vm.address = Adresse;
            vm.searchKey = Adresse;
            vm.$emit("updateLocation", Länge, Breite, vm.searchKey);
          }
        });
      });
    },
    sucheNachHand() {
      wenn (dieser.Suchschlüssel !== "" und dieser.poiPicker) {
        dies.poiPicker.searchByKeyword(dieses.searchKey);
      }
    }
  }
};
</Skript>
<style lang="stylus">
.Suchfeld {
  Rand oben: 6px;
  Breite: 100 %;
}
.Suchfeldeingabe {
  Polsterung: 0 15px;
  Breite: 100 %;
  Höhe: 32px;
  Zeilenhöhe: 32px;
  Farbe: #606266;
  Rand: 1px durchgezogen #dcdfe6;
  Rahmenradius: 4px;
}
.Suchfeld Eingabe:Fokus {
  Rahmenfarbe: #409eff;
  Umriss: 0;
}
.Suchfeldeingabe::-WebKit-Eingabeplatzhalter {
  Farbe: #c0c4cc;
}
.tip-box {
  Breite: 100 %;
  maximale Höhe: 280px;
  Position: absolut;
  oben: 72px;
  Z-Index: 10000;
  Überlauf-y: automatisch;
  Hintergrundfarbe: #fff;
}
</Stil>
<Stil>
.amap-ui-poi-picker-sugg,
.amap_lib_placeSearch {
  Rand: 1px durchgezogen #eee;
  Rahmenradius: 4px;
}
.amap-box {
  Höhe: 200px;
}
</Stil>

Der Stil hier verwendet einen Stift und Sie können andere Stile selbst konvertieren.

(3) Verwenden Sie die Kartensuchkomponente in der Komponente. Hier nehmen wir das Popup-Fenster als Beispiel.

<Vorlage>
  <el-dialog
    :title="Titel"
    :visible.sync="sichtbar"
    :before-close="HandleSchließen"
    Breite="600px"
    An den Hauptteil anhängen
    :Schließen bei Klick-Modal="false"
    :Schließen beim Drücken von Escape="false"
  >
    <div Klasse="Formular-Info">
      <el-form
        :model="Formular"
        ref="Formular"
        :Regeln="Regeln"
        Größe="klein"
        Beschriftungsbreite = "110px"
      >
        <el-form-item label="Adresse auswählen" prop="Adresse">
          <Basiskartensuche
            ref="Kartensuche"
            :Stadt="Formular.Stadt"
            :Wert="Formular.Adresse"
            :Längengrad="form.addLon"
            :Breitengrad="form.addLat"
            :isEdit="istEdit"
            @updateLocation="Standort aktualisieren"
          />
        </el-form-item>
        <el-Zeile>
          <el-col :span="12">
            <el-form-item prop="addLon" label="Längengrad">
              <el-Eingabe
                v-Modell.Nummer="form.addLon"
                :maximale Länge="15"
                Platzhalter="Bitte Längengrad eingeben"
              ></el-Eingabe>
            </el-form-item>
          </el-col>
          <el-col :span="12" class="right-label-form-item">
            <el-form-item prop="addLat" label="Breitengrad">
              <el-Eingabe
                v-Modell.Nummer="form.addLat"
                :maximale Länge="15"
                Platzhalter="Bitte Breitengrad eingeben"
              ></el-Eingabe>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>
  </el-dialog>
</Vorlage>
<Skript>
importiere BaseMapSearch aus "../base/mapSearch/baseMapSearch";
Standard exportieren {
    Requisiten: ["sichtbar", "isEdit", "Detail"],
    Komponenten:
      BaseMapSearch
    },
    Daten() {
        zurückkehren {
            Titel: "Adresse hinzufügen",
            bilden: {
                Adresse: "",
                hinzufügenLon: "",
                addLat: ""
            },
            Regeln:
                Adresse:
                  {
                    erforderlich: wahr,
                    Meldung: "Bitte geben Sie die Adresse ein",
                    Auslöser: ["verwischen", "ändern"]
                  }
                ],
                addLat: [
                  {
                    erforderlich: wahr,
                    Meldung: "Bitte geben Sie den Breitengrad ein",
                    Auslöser: ["verwischen", "ändern"]
                  }
                ],
                hinzufügenLon: [
                  {
                    erforderlich: wahr,
                    Meldung: "Bitte Längengrad eingeben",
                    Auslöser: ["verwischen", "ändern"]
                  }
                ],
            }
        };
    },
    erstellt() {
      wenn (dies.istBearbeiten) {
        diese.initForm();
      }
    },
    Methoden: {
        // Initialisiere das Formular initForm() {
          this.title = "Adresse ändern";
          wenn (dieses.detail) {
            dieses.Formular = { ...dieses.Detail };
          }
        },
        // Kartensuchstandort updateLocation(lng, lat, address) {
          diese.form.addLon = lng;
          this.form.addLat = lat;
          this.form.address = Adresse;
        },
        handleClose() {
          dies.$emit("update:sichtbar", false);
        }
    }
};
</Skript>

(4) Wenn zu diesem Zeitpunkt ESlint im Projekt verwendet wird, wird ein Fehler gemeldet, dass AMap und AMapUI nicht definiert sind. Wir müssen die Globals-Eigenschaft in der Datei .eslintrc.js definieren:

modul.exporte = {
    // ...
    Globale:
      AMap: falsch,
      AMapUI: falsch
    }
};

Wenn dies geschrieben wird, ist der Effekt wie folgt:

Dies ist das Ende dieses Artikels über die Installation und Verwendung von vue-amap. Weitere relevante Inhalte zur Installation und Verwendung von vue-amap finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Der vollständigste vue vue-amap verwendet das Amap-Plugin, um Beispielcode für Polygonbereiche zu zeichnen
  • vue verwendet die Amap-Komponente zur Prozessanalyse

<<:  Docker Consul-Übersicht und Schritte zum Erstellen einer Clusterumgebung (grafische Erklärung)

>>:  Thumbnail-Hover-Effekt mit CSS3 implementiert

Artikel empfehlen

webpack -v Fehlerlösung

Hintergrund Ich möchte die Webpack-Version überpr...

MySQL Best Practices: Grundlegende Arten von Partitionstabellen

Übersicht über partitionierte MySQL-Tabellen Da M...

Implementierung der Validierung mehrerer Elemente im Formular

Im Projekt werden häufig Formulartests durchgefüh...

Detaillierte Erläuterung der Datentypprobleme bei der JS-Array-Indexerkennung

Als ich ein WeChat-Applet-Projekt schrieb, gab es...

Mehrere Möglichkeiten zum Sichern einer MySql-Datenbank

mysqldump-Tool-Sicherung Sichern Sie die gesamte ...

Beispielcode zur Installation von Jenkins mit Docker

Zwei Probleme, die bei der Installation von Docke...

Ist das Tag „li“ ein Blockelement?

Warum kann es die Höhe festlegen, aber im Gegensat...

4 Funktionen, die durch das Transform-Attribut in CSS3 implementiert werden

In CSS3 können mit der Transformationsfunktion vi...

Detaillierte Erklärung der MySQL information_schema-Datenbank

1. Übersicht Die Datenbank information_schema ist...

Vue realisiert den Produktlupeneffekt

In diesem Artikelbeispiel wird der spezifische Co...