Как побороть Cannot read private member from an object whose class did not declare it в Яндекс картах API v3?
Всем привет, внедряю яндекс карты в приложение на Vue 3.
Имеется код инициализации
const initYMap = async (_container: HTMLElement) => { try { await ymaps3.ready // Geocode const position = await getPosition() // Initialization map.value = new ymaps3.YMap(_container, {location: {center: position, zoom: 14}}) // Layers map.value .addChild(new ymaps3.YMapDefaultSchemeLayer({})) .addChild(new ymaps3.YMapFeatureDataSource({id: MARKER_SOURCE})) .addChild(new ymaps3.YMapLayer({source: MARKER_SOURCE, type: 'markers', zIndex: 1800})) // Events .addChild(new ymaps3.YMapListener({layer: 'any', onActionEnd: (evt) => onMoveHandler(evt)})) // Spawn points points.value = await initPoints(map.value.bounds) ?? null if (points.value) { const {YMapClusterer, clusterByGrid} = await ymaps3.import('@yandex/ymaps3-clusterer@0.0.1') const features: Feature[] = pointsToFeatures(points.value) clusterer = new YMapClusterer({ method: clusterByGrid({gridSize: 64}), features, marker: marker, cluster: cluster }) map.value.addChild(clusterer) } } catch (error) { console.log('Произошла ошибка инициализации карты', error) } } |
const initYMap = async (_container: HTMLElement) => { try { await ymaps3.ready // Geocode const position = await getPosition() // Initialization map.value = new ymaps3.YMap(_container, {location: {center: position, zoom: 14}}) // Layers map.value .addChild(new ymaps3.YMapDefaultSchemeLayer({})) .addChild(new ymaps3.YMapFeatureDataSource({id: MARKER_SOURCE})) .addChild(new ymaps3.YMapLayer({source: MARKER_SOURCE, type: 'markers', zIndex: 1800})) // Events .addChild(new ymaps3.YMapListener({layer: 'any', onActionEnd: (evt) => onMoveHandler(evt)})) // Spawn points points.value = await initPoints(map.value.bounds) ?? null if (points.value) { const {YMapClusterer, clusterByGrid} = await ymaps3.import('@yandex/ymaps3-clusterer@0.0.1') const features: Feature[] = pointsToFeatures(points.value) clusterer = new YMapClusterer({ method: clusterByGrid({gridSize: 64}), features, marker: marker, cluster: cluster }) map.value.addChild(clusterer) } } catch (error) { console.log('Произошла ошибка инициализации карты', error) } }
В строке с // Spawn points я беру координаты границ карты с помощью map.value.bounds
В Итоге получаю следующую ошибку
TypeError: Cannot read private member from an object whose class did not declare it |
TypeError: Cannot read private member from an object whose class did not declare it
Почему это происходит? Я же получаю bounds буквально в той же функции где и была объявлена карта? Как это исправить?
Дополнительно:
А впринципе все решилось, инциализировав map как обычную переменную, нежели ref
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Для того чтобы побороть ошибку "Cannot read private member from an object whose class did not declare it" при работе с Яндекс картами API v3, необходимо понимать, что данная ошибка возникает из-за попытки доступа к приватному свойству объекта, которое не было объявлено в классе. В случае с API Яндекс карт, это может быть вызвано неправильной работой с объектами карты или маркерами.
Для решения данной проблемы, необходимо удостовериться, что вы используете правильные методы доступа к свойствам объектов карты или маркеров. В случае с API Яндекс карт, следует использовать предоставленные методы доступа к свойствам объектов, а не обращаться к ним напрямую.
Пример использования методов доступа к свойствам объектов API Яндекс карт:
// Создание маркера на карте var myPlacemark = new ymaps.Placemark([55.76, 37.64], { hintContent: 'Москва!', balloonContent: 'Столица России' }); // Получение содержимого балуна маркера var balloonContent = myPlacemark.properties.get('balloonContent');
При работе с объектами API Яндекс карт, рекомендуется изучить документацию по использованию методов доступа к свойствам объектов и следовать рекомендациям разработчиков. Таким образом, можно избежать ошибок доступа к приватным свойствам и обеспечить корректную работу с API.