本文地址:https://www.cnblogs.com/veinyin/p/11842886.html
上半年做了一個地圖,有多種點,為了便於管理 marker 及對應的 popup、tooltip,將以上內容封成了 vue 模板
先介紹一個實現方案:
基於 vue2-leaflet 的 LGeoJson,封裝了自己的 GeoLayer,用於實現點、線、面
在 LGeoJson 的 options 里,onEachFeature 中生成對應的 marker,官方提供了 JSX 方式,如下
可以發現就是在 render 中 return 一個 vue 模板, 那么我們可以在 GeoLayer 的 props 中定義 renderMarker,接收生成點的方法
renderMarker 在使用 GeoLayer 的頁面中定義,return一個
只需要在使用 GeoLayer 的地方,傳入一個 renderMarker 方法,renderMarker返回相應的 marker 模板,替換掉上圖 return 里的內容
出現問題:
頁面保持打開,大約半天時間就會崩潰,查看內存發現內存一直在增長,此處補充一下地圖上的點位需要5分鍾刷新一次,
測試反饋后定位問題,確定就是 renderMarker 這個方法造成的
將 vue 模板換成 HTML 模板,手動不斷刷新,發現內存會回收,進一步定位發現 marker 模板一直沒有被銷毀
解決問題:
既然是 vue 模板未被銷毀,最快的解決方案就是換成 HTML 模板
因為 popup 和 tooltip 是點擊時生成的,因此不用修改
PS:使用 vue 模板副作用
new Vue 生成的模板,無法通過 this 訪問 vuex 獲取數據,可通過傳參獲取
END~~~≥ω≤