Day30-实作(地图) (part2)

从左侧栏位获取药局位置

当我们在左设拦点击药局列表时,左侧的地图区域不会带我们到对应的位置,此时我们需要再做最後的设定。

首先在data位置加上markers阵列来存标记

data() {
  return {
    map: {},
    markers:[]
  };
},

再回到addMarker改写

addMarker(item) {
  //...省....

  // 替marker加入id与经纬度资讯
  marker.markerId = item.id;
  marker.lng = item.longitude;
  marker.lat = item.longitude;

  //将marker push 到阵列
  this.marker.push(marker);
},

最後要记得在clearMarkers时清空阵列

methods: {
    clearMarkers() {
      //清除地图所有标记
      this.map.eachLayer((layer) => {
        if (layer instanceof L.Marker) {
          this.map.removeLayer(layer);
        }
      });

      //清空阵列
      this.markers.length = 0;
    },
  },

再来在maskMap.vue的methods加上triggerPopup,点列表会让右侧标记的位置有个文字框显示要局名称

triggerPopup(markerId){
    //找目标标记
    const marker = this.markers.find((d)=>d.markerId===markerId)
    //将地图中心指向目标标记,并开启pop
    this.map.flyTo(new.L.LatLng(marker.lng,marker.lat),15)
    marker.openPopup()
}

到这边功能并没有和左侧做连结,所以要回到asideMenu.vue的<li class="store-info wraps">加上click事件,此时会发现一个问题,在maskMap身上的triggerPopup要怎麽和asideMenu和click事件做到跨元件传递methods? 答案就是先前学过的$emit

首先先在App.vue的asideMenu和maskMap加上ref,asideMenu加上自定是件

<template>
  <div id="app">
    <!-- aside-menu 左侧栏 -->
    <asideMenu @triggerMarkerPopup="openPopup" ref="menu" />

    <!-- 地图区块 -->
    <maskMap ref="map" />

    <!-- lightBox -->
    <light-box />
  </div>
</template>

同时在这边也要加上openPopup,透过this.$refs.map执行对应map的triggerPopup

methods: {
  ...mapActions(["fetchLocations", "fetchPharmacies"]),
  openPopup(id) {
    this.$refs.map.triggerPopup(id);
  },
},

回到asideMenu.vue将原本的

<li class="store-info wraps" v-for="s in filteredStores" :key="s.id">

改成

<li
  class="store-info wraps"
  v-for="s in filteredStores"
  :key="s.id"
  @click="$emit('triggerMarkerPopup', s.id)"
>

地图大功告成!!!!!!!

终於完成了30天挑战,觉得好像又多会的一点东西,同时也发现很多自己不足的地方,js基础还不够稳以至於在研读的时候花了很多时间找资料...
结束了一个里程碑又是下一个的开始,学习之路要一直走下去!!! 在学程序的大家一起加油吧~~


<<:  [Python 爬虫这样学,一定是大拇指拉!] DAY30 - 结语

>>:  [ Day 30 ] - 初学者升级啦~完赛心得

赌盘的策略思考 - 菲阿里四价策略

这里分享第二个策略 - 菲阿里四价策略 菲阿里四价指的是:昨日高点、昨日低点、昨天收盘、今天开盘四个...

Day 17. 计算属性(Computed) VS 方法(Methods)

昨天介绍了computed的基本使用方式,今天多讲一点点有关methods的, 大家准备好了吗ε٩(...

【Day7】[资料结构]-伫列Queue

伫列(Queue)是一种排列结构,虽然与堆叠类似,但伫列在新增与删除资料必须在不同端进行,前端(fr...

Day 11 - 在 VyOS 设定 BGP Peer

继上篇,我们安装好 FRRouting 後,我们先在 VyOS 上设定一下 BGP 吧! 环境 我们...

Day 13:架设 Grafana (1)

那麽今天再回来继续处理我们的 dashboard 吧,上次虽然找到了这个 caddy 的 dashb...