vue-yandex-maps icon indicating copy to clipboard operation
vue-yandex-maps copied to clipboard

Не работают события в ObjectManager

Open Ramsly opened this issue 2 years ago • 8 comments

Привет! Использую ObjectManager. Не работают события.

Получаю сообщение:

[Vue warn]: Extraneous non-emits event listeners (mouseenter) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.

Думал повесить тогда события на YandexMarker. Там события тоже не работают, я так понимаю только вешать на компонент ObjectManager

Песочница: https://codesandbox.io/p/sandbox/sobytiya-v-yandexobjectmanager-1h8trh?file=%2Fsrc%2FApp.vue%3A8%2C21

Ramsly avatar Jul 16 '23 06:07 Ramsly

Привет! Хорошо, посмотрю как будет время

PNKBizz avatar Jul 17 '23 13:07 PNKBizz

Привет, будет ли время исправить ошибку или не получается совсем?

Ramsly avatar Sep 11 '23 05:09 Ramsly

Привет! Ух. Не могу назвать сроков, но постараюсь до конца месяца разобраться со всеми накопившимися проблемами...

PNKBizz avatar Sep 11 '23 06:09 PNKBizz

Будем надеяться)

Ramsly avatar Sep 13 '23 05:09 Ramsly

Привет!) Стоит рассчитывать на решение проблемы или нет? Если нет, я как-нибудь попробую решить проблему самостоятельно в проекте. Просто не знаю даже чем помочь, не супер знаток в яндекс картах и в TS

Ramsly avatar Oct 05 '23 13:10 Ramsly

Привет!) Стоит рассчитывать на решение проблемы или нет? Если нет, я как-нибудь попробую решить проблему самостоятельно в проекте. Просто не знаю даже чем помочь, не супер знаток в яндекс картах и в TS

я бы переписал на

yaObjectManager.add(objects)

на выходе получится:

...........................................................................
const points = reactive({
  type: 'FeatureCollection',
  features: [],
})

const getPoints = () => {
  points.features = _.map(points.value, (point) => {
    return {
      type: 'Feature',
      id: point.uuid,
      geometry: {
        type: 'Point',
        coordinates: [point.latitude, point.longitude],
      },
      options: {
        iconLayout: 'default#imageWithContent',
        iconImageHref: '/@src/assets/img/marker.png',
        iconImageSize: [40, 40],
        iconImageOffset: [-15, -35],
      },
    }
  })

  yaObjectManager.removeAll()
  const objects = JSON.stringify(points)
  yaObjectManager.add(objects)
  yaMap.events.add('boundschange', () => {
    updatePointList()
  })
}
const initMap = async (map) => {
  yaMap = map
  // eslint-disable-next-line no-undef
  yaObjectManager = new ymaps.ObjectManager({
    clusterize: true,
  })
  yaMap.geoObjects.add(yaObjectManager)
  getPoints()
  yaObjectManager.objects.events.add('click', (e) => {
    selectedPointId.value = e.get('objectId')
  })
}
...........................................................................
<template>
<div class="map-box">
 <YandexMap
              :settings="settings"
              :controls="['zoomControl', 'geolocationControl']"
              :coordinates="coordinates"
              @created="initMap"
            >
</div>
</template>

Там события уже нативные можно вешать (у меня все работает)

crocone avatar Oct 18 '23 11:10 crocone

Привет!) Стоит рассчитывать на решение проблемы или нет? Если нет, я как-нибудь попробую решить проблему самостоятельно в проекте. Просто не знаю даже чем помочь, не супер знаток в яндекс картах и в TS

я бы переписал на

yaObjectManager.add(objects)

на выходе получится:

...........................................................................
const points = reactive({
  type: 'FeatureCollection',
  features: [],
})

const getPoints = () => {
  points.features = _.map(points.value, (point) => {
    return {
      type: 'Feature',
      id: point.uuid,
      geometry: {
        type: 'Point',
        coordinates: [point.latitude, point.longitude],
      },
      options: {
        iconLayout: 'default#imageWithContent',
        iconImageHref: '/@src/assets/img/marker.png',
        iconImageSize: [40, 40],
        iconImageOffset: [-15, -35],
      },
    }
  })

  yaObjectManager.removeAll()
  const objects = JSON.stringify(points)
  yaObjectManager.add(objects)
  yaMap.events.add('boundschange', () => {
    updatePointList()
  })
}
const initMap = async (map) => {
  yaMap = map
  // eslint-disable-next-line no-undef
  yaObjectManager = new ymaps.ObjectManager({
    clusterize: true,
  })
  yaMap.geoObjects.add(yaObjectManager)
  getPoints()
  yaObjectManager.objects.events.add('click', (e) => {
    selectedPointId.value = e.get('objectId')
  })
}
...........................................................................
<template>
<div class="map-box">
 <YandexMap
              :settings="settings"
              :controls="['zoomControl', 'geolocationControl']"
              :coordinates="coordinates"
              @created="initMap"
            >
</div>
</template>

Там события уже нативные можно вешать (у меня все работает)

Привет! Спасибо большое! Думал уже и так сделать честно говоря, до последнего жду обнову по этому вопросу) Просто не хочется велосипеды писать в коде у себя, так как автор постарался и все красиво реализовал, за что ему огромное спасибо, просто небольшая проблемка получилась с этим моментом

Ramsly avatar Oct 18 '23 15:10 Ramsly

Привет! Спасибо большое! Думал уже и так сделать честно говоря, до последнего жду обнову по этому вопросу) Просто не хочется велосипеды писать в коде у себя, так как автор постарался и все красиво реализовал, за что ему огромное спасибо, просто небольшая проблемка получилась с этим моментом

Так это норм решение из либы автора) Более того - это решение более правильно так как занимает меньше времени на рендеринг. Но дело это личное))

crocone avatar Oct 18 '23 18:10 crocone