【问题标题】:map container not found Leaflet with svelte找不到地图容器 带有苗条的传单
【发布时间】:2021-03-05 07:01:52
【问题描述】:

下面是我的代码。我正在使用传单以苗条的方式绘制图表。但我收到错误“未定义地图”。我该如何解决?

<script>
    import L from 'leaflet';
    let map;
    map = L.map("mapDemo", {
  minZoom: 4,
  maxZoom: 6
});

map.zoomControl.setPosition("bottomright");
var bounds = [
  [-10, -10],
  [10, 10]
];
map.fitBounds(bounds);
var markers = {
  id1: { title: "Marker 1", coords: [1, 0], description: "Text for marker 1" },
  id2: { title: "Marker 2", coords: [4, 2], description: "Text for marker 2" },
  id3: { title: "Marker 3", coords: [8, 8], description: "Text for marker 3" }
};

var layers = L.layerGroup().addTo(map);
var titlesList = [];
var idToLayer = {};
var titleToId = {};
var idToTitle = {};
var idToText = {};

var markerOnClick = function () {
  var mId = this.options.markerId;
};

$:each(markers, function (key, val) {
  var markerOptions = {
    markerId: key,
    markerTitle: val["title"],
    markerText: val["description"]
  };

  var marker = L.marker(val["coords"], markerOptions).addTo(map);
  var popupContent = val["title"];
  // Bind popup to marker click
  marker.bindPopup(popupContent);
});

</script>
  <div id="mapDemo">
  </div>

另外,我想添加一个图像作为背景,并在给定的图像上绘制坐标。

【问题讨论】:

    标签: javascript svelte svelte-3


    【解决方案1】:

    您应该将 Leaflet 初始化代码包装在 onMount 中。 script 标签在元素渲染到 DOM 之前运行,因此 mapDemo 元素还不存在。

    我也不确定你想用 $:each 做什么——我想你正在寻找 Object.entries(markers).forEach(([key, val]) =&gt; {})

    这是您的带有 onMount 的脚本标签,并且每个都被重写。

    <script>
    import { onMount } from 'svelte';
    import L from 'leaflet';
    let map;
    
    onMount(() => {
        map = L.map("mapDemo", {
            minZoom: 4,
            maxZoom: 6
        });
    
        map.zoomControl.setPosition("bottomright");
        var bounds = [
            [-10, -10],
            [10, 10]
        ];
        map.fitBounds(bounds);
        var markers = {
            id1: {
                title: "Marker 1",
                coords: [1, 0],
                description: "Text for marker 1"
            },
            id2: {
                title: "Marker 2",
                coords: [4, 2],
                description: "Text for marker 2"
            },
            id3: {
                title: "Marker 3",
                coords: [8, 8],
                description: "Text for marker 3"
            }
        };
        var layers = L.layerGroup().addTo(map);
        var titlesList = [];
        var idToLayer = {};
        var titleToId = {};
        var idToTitle = {};
        var idToText = {};
    
        var markerOnClick = function() {
            var mId = this.options.markerId;
        };
    
        Object.entries(markers).forEach(([key, val]) => {
            var markerOptions = {
                markerId: key,
                markerTitle: val["title"],
                markerText: val["description"]
            };
    
            var marker = L.marker(val["coords"], markerOptions).addTo(map);
            var popupContent = val["title"];
            // Bind popup to marker click
            marker.bindPopup(popupContent);
        });
    })
    </script>
    

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2021-04-12
      • 1970-01-01
      • 2022-07-09
      • 1970-01-01
      相关资源
      最近更新 更多