typescript - Hur man importerar leaflet-control-geocoder i Angular 12.x?
Jag har installerat Leaflet i Angular 12 med följande kommandon:
npm install leaflet
npm install @asymmetrik/ngx-leaflet
npm install --save-dev @types/leaflet
Jag inkluderade stilarna: ./node_modules/leaflet/dist/leaflet.css i angular.json-filen och LeafletModule i min app.module.ts.
Kartan fungerar bra, men jag försöker lägga till sökfältet från geokodaren, för det har jag inkluderat länken och skriptet för geokodarlänkar i min index.html, som finns här.
Och detta är min ts-fil:
import { Component, AfterViewInit } from '@angular/core';
import * as L from 'leaflet';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent implements AfterViewInit {
title = 'leaf-let';
private map: any;
constructor() {}
ngAfterViewInit(): void {
this.initMap();
}
private initMap(): void {
this.map = L.map('map').setView([14.094167, -87.206667], 15);
const tiles = L.tileLayer(
'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
{
maxZoom: 19,
attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> `
`contributors',
}
);
tiles.addTo(this.map);
//L.Control.geocoder().addTo(this.map);
}
Men när jag gör L.Control.geocoder().addTo(this.map); får jag felet:
egenskapen 'geocoder' finns inte på typen 'typeof control'
Svar #1
Du har inte importerat biblioteket och dess stil:
- Installera leaflet-control-geocoder
import "leaflet-control-geocoder/dist/Control.Geocoder.css";import "leaflet-control-geocoder/dist/Control.Geocoder.js";
Det verkar också som att du inte använder ngx-leaflet utan vanlig leaflet istället. Om så är fallet bör du använda följande tillvägagångssätt:
private initMap(): void {
this.map = L.map("map").setView([14.094167, -87.206667], 15);
const tiles = L.tileLayer(
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
{
attribution:
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}
).addTo(this.map);
tiles.addTo(this.map);
(L.Control as any).geocoder().addTo(this.map);
}
Initiera pluginet med (L.Control as any) för att undvika TypeScript-felet men felet du fick berodde på att du inte importerade biblioteket i förväg.
Demo
