gpt4 book ai didi

javascript - 如何使用 Angular 8 为某些回调(Leaflet 库)设置事件处理程序

转载 作者:搜寻专家 更新时间:2023-10-30 21:44:09 25 4
gpt4 key购买 nike

<分区>

我整理了一些使用 leaflet 库的 angular 8 应用程序。我最终得到了一些工作代码,但觉得它可能不是实现我想要的目标的最佳方式。请先阅读到最后...

我的组件 typescript 文件如下所示:

import { Component, OnInit } from '@angular/core';

declare let L;

@Component({
selector: 'app-new-hotspot-form',
templateUrl: './new-hotspot-form.component.html',
styleUrls: ['./new-hotspot-form.component.css']
})
export class NewHotspotFormComponent implements OnInit {

latitude: string = "51.505";
longitude: string = "-0.09";
name: string = "Hotspot 1";
radius: string = "5.0";
map: any;

constructor() { }

getOnMapClickHandler() {
const myComponent = this;
let clickHandler = function(e) {
myComponent.latitude = e.latlng.lat;
myComponent.longitude = e.latlng.lng;
myComponent.map.setView([e.latlng.lat, e.latlng.lng]);
};
return clickHandler;
}

ngOnInit() {
this.map = L.map('newhotspot').setView([this.latitude, this.longitude], 13);
this.map.on('click', this.getOnMapClickHandler());

L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
maxZoom: 18,
id: 'mapbox.streets',
accessToken: '_MY_SECRET_ACCESS_TOKEN_'
}).addTo(this.map);

}

}

对应的html文件是这样的:

<div class="ui-fluid">

<div class="ui-g">

<div class="ui-g-12 ui-md-6">

<div class="ui-g-4">
Name
</div>

<div class="ui-g-8">
<input [(ngModel)]="name" pInputText type="text" />
</div>

</div>

<div class="ui-g-12 ui-md-6">

<div class="ui-g-4">
Radius
</div>

<div class="ui-g-8">
<input [(ngModel)]="radius" pInputText type="text" />
</div>

</div>

<div class="ui-g-12">

<div class="ui-g-2">
Location
</div>

<div class="ui-g-10">
<div id="newhotspot"></div>
</div>

</div>

<div class="ui-g-12 ui-md-6">
<div class="ui-g-4">
Longitude
</div>
<div class="ui-g-8">
<input [(ngModel)]="longitude" type="text" />
</div>
</div>
<div class="ui-g-12 ui-md-6">
<div class="ui-g-4">
Latitude
</div>
<div class="ui-g-8">
<input [(ngModel)]="latitude" pInputText type="text" />
</div>
</div>

</div>

</div>

primeng 也“在船上”,但对这个问题没有发挥作用(我希望...)。

我正在为我的 map 的点击事件分配一个事件处理程序,并且想知道为什么我所做的数据绑定(bind)不起作用。直到我发现我的事件处理程序没有将 this 分配给我的组件。然后我更改了我的代码以执行一个以某种方式绑定(bind)此 的工厂方法。尽管代码现在可以工作了,但我对此有一些奇怪的直觉,并且想知道是否有更原生的方法来实现事件处理程序的正常工作

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com