I'm working on Angular CLI in which I've built a Leaflet Map.
The goal is to select layers with checkboxes to display them in the map as the HTML part is showing :

 <div class="form-check">
 <input class="form-check-input" type="checkbox" (change)="testCheck($event)" name="releves">
 <label class="form-check-label">Layer 1</label>
 </div>

当我 Select "Layer1"时,复选框被选中,这将运行testCheck($event).

在Typescript部分显示时,我添加了几行代码以在 map 上显示图层:

 testCheck(event: any){
      if (event.target.name == 'releves'){
         var releves = L.tileLayer.wms('https://URL_TO_THE_WMS', {layers: 'myLayer',format: 'image/png',transparent:true});
         if (event.target.checked === true){ 
                 if (! this.mymap.hasLayer(releves)) {
                    releves.addTo(this.mymap);
                 }
                 else if (this.mymap.hasLayer(releves)) {
                    // do nothing
                 }
            let i = 0;
            this.mymap.eachLayer(function(){ i += 1; });
            console.log('Map has', i, 'layers.');
         }
         else {
                if (this.mymap.hasLayer(releves)) {
                    console.log ("has layer 1");
                    this.mymap.removeLayer(releves);
                }
            }
        }
    }

图层1在 map 上显示得很好,这里没有问题(参见releves.addTo(this.mymap)).但我有两个问题无法解决:

  1. 当我取消选中"Layer 1"(表示else condition part中的event.target.name不是true)时,该层不会被删除,而我使用的是removeLayer方法.
  2. hasLayer法似乎不起作用.事实上,在显示了第1层之后,当我取消选中并测试该层是否存在时,我应该得到控制台.删除前记录消息"has layer 1".但什么都没有...

May you know how to debug that ?
Any help would be very appreciated, thanks

推荐答案

每次调用testCheck方法时,都会创建一个全新的releves层,所以hasLayer(releves)总是false.

将图层存储在"永久"状态,通常作为Angular 组件的一个成员,就像mymap:

@Component({})
export class MyComponent {
  releves = L.tileLayer.wms();

  testCheck(event) {
    if (this.mymap.hasLayer(this.releves)) {
      // etc.
    }
  }
}

Javascript相关问答推荐

无法在page. evalve()内部使用外部函数

除了在Angular 16中使用快照之外,什么是可行且更灵活的替代方案?

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

MongoDB中的引用

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

jQuery s data()[storage object]在vanilla JavaScript中?'

当点击注册页面上的注册按钮时,邮箱重复

引用在HTMLAttributes<;HTMLDivElement>;中不可用

为什么按钮会随浮动属性一起移动?

虚拟滚动实现使向下滚动可滚动到末尾

使用GraphQL查询Uniswap的ETH价格

在forEach循环中获取目标而不是父对象的属性

在Java中寻找三次Bezier曲线上的点及其Angular

如何将未排序的元素追加到数组的末尾?

将数组扩展到对象中

如何在我的Next.js项目中.blob()我的图像文件?

Phaserjs-创建带有层纹理的精灵层以自定义外观

如何在每隔2分钟刷新OKTA令牌后停止页面刷新

在没有任何悬停或其他触发的情况下连续交换图像

AstroJS混合模式服务器终结点返回404