Leaflet .locate watch 选项在更改选项卡 Ionic 3 后会中断 .locate

Posted

技术标签:

【中文标题】Leaflet .locate watch 选项在更改选项卡 Ionic 3 后会中断 .locate【英文标题】:Leaflet .locate watch option breaks .locate after changing tab Ionic 3 【发布时间】:2017-10-30 17:52:45 【问题描述】:

我有一个名为 loadmap() 的函数,我在其中创建地图。我正在使用

加载此函数
 ionViewDidEnter() 
this.loadmap();


  

我有内部加载图

  this.map = leaflet.map("map").fitWorld();

这就是我初始化地图的方式

这就是我在用户更改选项卡时删除地图的方式。

ionViewDidLeave()

    this.map.remove();


  

这是我的 .locate 函数:

var usermarker;


  this.map.locate(
    setView: true,
    maxZoom: 120,
    watch:true,
    enableHighAccuracy:true



  ).on("locationfound", e => 
    if (!usermarker) 
      usermarker = new L.marker(e.latlng).addTo(this.map);
   else 
      usermarker.setLatLng(e.latlng);
  
).on("locationerror", error => 
  if (usermarker) 
      this.map.removeLayer(usermarker);
      usermarker = undefined;
  
);

问题在于第一次 .locate 功能有效。但是如果我更改选项卡并返回到地图选项卡 .locate 功能不起作用。如果我删除监视选项它可以工作。

谢谢

【问题讨论】:

【参考方案1】:

除了map.remove(),你还得打电话给map.stopLocate()

停止观看之前由map.locate(watch: true)发起的位置

现场演示:https://plnkr.co/edit/PKMPjfX3zD3QdWmEI0iX?p=preview(使用“切换地图”按钮模拟您不断变化的选项卡)

话虽如此,Leaflet 确实可以在使用remove map 方法时自动执行此操作。 => 合并到PR Leaflet/Leaflet#5893

【讨论】:

谢谢,也许他们可以在下一个版本中添加它。顺便说一句,我还有一个问题。第一次加载时不会出现此错误。它发生在更改标签后。如果用户双击地图上的某个地方,我会得到无法读取未定义错误的属性“_leaflet_pos”。你有什么主意吗 ?谢谢 我猜原因是当用户更改标签 时我也应该删除 html 代码并在用户返回地图时添加它 如果您需要有关该问题的帮助,请随时打开一个新问题,并提供重现问题的所有详细信息。

以上是关于Leaflet .locate watch 选项在更改选项卡 Ionic 3 后会中断 .locate的主要内容,如果未能解决你的问题,请参考以下文章

leaflet地图在选项卡中不正常显示

在leaflet.js中定义了诸如“position:topleft”之类的控制选项在哪里?我可以创建position:bottomcenter吗?

Leaflet API 翻译

Leaflet API翻译

当 reloadOnSearch 为 false 时,$location.search 上的 AngularJs $watch 不起作用

vue 打包 可以加 --watch 持续打包