yandex-maps-unofficial / vue-yandex-map

Yandex Maps Component for VueJS
MIT License
359 stars 103 forks source link

Некорректное поведение карты при генерации несколько instance карт в цикле #332

Closed devmansurov closed 2 years ago

devmansurov commented 2 years ago

Здравствуйте! Я создал проект где генерирую несколько карт с маркерами в цикле. Но маркеры на карте отображается только в последнем карте и при этом в каждом сгенерированном карте по идее должно была отображаться только 1 маркер но все маркеры показывается одновременно только в последном карте. Как исправить такую ошибку? Может есть возможность на каждую карту присвоить какое то уникальный идентификатор как то?

Как я понял в вашем коде id контейнера яндекс карты ymapIdявляется статичним. Подробнее тут

Код:

<template>
  <div class="container">
    <yandex-map
      v-for="(coords, key) in markers"
      :key="key"
      ref="map"
      style="width: 100%; height: 100%"
      :zoom="10"
      :coords="coords"
      :controls="[]"
      :options="{ suppressMapOpenBlock: true }"
    >
      <ymap-marker :markerId="key" :coords="coords" />
    </yandex-map>
  </div>
</template>

<script>
export default {
  name: "App",
  data() {
    return {
      markers: [
        [38.569256, -121.354347],
        [38.51043, -121.455941],
        [38.550689, -121.35425],
        // [38.4794, -121.399785],
        // [38.409867, -121.403937],
      ],
    };
  },
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  /* margin-top: 60px; */
}
.container {
  height: 150px;
}

.ymap-container {
  margin-bottom: 10px;
  border-bottom: 1px solid #000;
}
</style>

В javascript это выглядеть примерно таким образом:

<script type="text/javascript">
  ymaps.ready(init);

  function init() {     
    var myMap = new ymaps.Map("map-1", {
        center: [56.830175456095785, 60.593889812164235], 
        zoom: 16
    });
    myMap.behaviors.disable('scrollZoom', 'drag'); 

    var myMap2 = new ymaps.Map("map-2", {
        center: [56.830175456095785, 60.593889812164235], 
        zoom: 16
    });
    myMap2.behaviors.disable('scrollZoom', 'drag'); 
  }
</script>
klyopa255 commented 2 years ago

Аналогичная проблема, в версиях с 0.8.1... покопался в сорсах и выяснил что при отрисовке следующей карты все предыдущие перемаунчиваются и каррент карта в цикле забирает на себя все существующие маркеры. Решил проблему понижением версии до 0.8.0

devmansurov commented 2 years ago

.8.0

Но это не помог когда версия vue >= 3

Akles commented 2 years ago

Столкнулся с той же проблемой, возьмите в работу!

Akles commented 2 years ago

@PNKBizz когда можно ожидать или как можно исправить самому?

PNKBizz commented 2 years ago

В ближайшее время посмотрю эту проблему, но буду очень рад вашему реквесту.

PNKBizz commented 2 years ago

Проверьте на последней версии, пожалуйста

dpmango commented 2 years ago

Аналогичная проблема, решилось понижением до 0.8.0 На 0.11 рисовались только на последней сущности карт