首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngx-leaflet地图缩放事件不触发

ngx-leaflet地图缩放事件不触发
EN

Stack Overflow用户
提问于 2018-08-23 04:45:59
回答 1查看 1.8K关注 0票数 1

根据ngx-leaflet文档,link (leafletMapMoveEnd)(leafletMapZoomEnd)都是暴露的事件。

我假设这些事件是在初始化map的同一个DOM中公开的,应该像这样实现:

代码语言:javascript
复制
<div 
 leaflet
 [leafletOptions]="options"
 (leafletMapReady)="onMapReady($event)"
 (leafletMapMoveEnd)="onMapMove($event)"
 (leafletMapZoomEnd)="onMapZoom($event)">

这是捕获这些事件的正确方法吗?

(leafletMapReady)似乎运行得很好。

然而,当我自己弄乱地图时,(leafletMapZoomEnd)(leafletMapMoveEnd)似乎都不会触发。

我试着平移地图,也试着放大和缩小。这些交互都不会导致命中handleMapZoomEnd($event) handleMapMoveEnd($event)方法。

代码语言:javascript
复制
import { Component, Input, OnChanges, OnInit, Output, EventEmitter } from '@angular/core';
import * as fromLeafLet from 'leaflet'; 
import 'leaflet.markercluster';

@Component({
  selector: 'map',
  templateUrl: './map.component.html',
  styleUrls: [
    './map.component.css',
    './extra-marker-icon.css'
  ]
})
export class MapComponent implements OnInit, OnChanges {
 constructor(){}

 onMapReady(map: fromLeafLet.Map): void {
    this.map = map;
  }

  onMapZoom(event: any):void{
    console.log('Zoom');
    this.onMapDirty.emit();
  }

  onMapMove(event: any):void{
    console.log('Move');
    this.onMapDirty.emit();
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-28 11:23:44

在@asymmetrik/ngx-leaflet ngcli教程的Github repo中,我添加了一个分支demo/events,它显示了一个使用缩放/移动事件的非常简单的示例。

代码语言:javascript
复制
git clone git@github.com:Asymmetrik/ngx-leaflet-tutorial-ngcli.git
git checkout demo/events

感兴趣的文件包括:

代码语言:javascript
复制
./src/app/app.component.html
./src/app/app.component.ts

模板(如下)包含两个处理程序,分别用于leafletMapMoveEnd和leafletMapZoomEnd输出:

代码语言:javascript
复制
<div class="map"
  leaflet
  [leafletOptions]="options"
  (leafletMapReady)="onMapReady($event)"
  (leafletMapMoveEnd)="handleMapMoveEnd($event)"
  (leafletMapZoomEnd)="handleMapZoomEnd($event)"
></div>

组件(如下所示)只是在这些事件发生时打印到控制台。我删除了演示事件工作所不需要的所有东西。

代码语言:javascript
复制
import { Component } from '@angular/core';
import * as L from 'leaflet';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: [
    './app.component.css'
  ]
})
export class AppComponent {

  streetMaps = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    detectRetina: true,
    attribution: '&amp;copy; &lt;a href="https://www.openstreetmap.org/copyright"&gt;OpenStreetMap&lt;/a&gt; contributors'
  });


  map: L.Map;

  options = {
    layers: [ this.streetMaps ],
    zoom: 7,
    center: L.latLng([ 46.879966, -121.726909 ])
  };

  onMapReady(map: L.Map): void {
    this.map = map;
  }

  handleMapZoomEnd(map: L.Map):void{
    console.log('onMapZoomEnd');
  }

  handleMapMoveEnd(map: L.Map):void{
    console.log('onMapMoveEnd');
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51974852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档