@onlyJavaScriptProgrammer
Студент, который выбрал не то направление...

Как получить доступ к глобальной переменной ymaps, используя плагин vue-yandex-map?

Здравствуйте, у меня такой вопрос. Я использую плагин vue-yandex-map во vue 2, делаю все по документации, подключаю плагин глобально, передаю определенные опции в плагин. Далее читаю документацию и хочу получить доступ к некоторым классам, например, к классу GeoObject через ymaps, но не могу этого сделать, ругается линтер и пишет что ymaps undef. Прилагаю код из документации Я.Карт:
ymaps.ready(init);

function init() {
    var myMap = new ymaps.Map("map", {
            center: [55.73, 37.75],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        });

    // Создаем многоугольник, используя класс GeoObject.
    var myGeoObject = new ymaps.GeoObject({
        // Описываем геометрию геообъекта.
        geometry: {
            // Тип геометрии - "Многоугольник".
            type: "Polygon",
            // Указываем координаты вершин многоугольника.
            coordinates: [
                // Координаты вершин внешнего контура.
                [
                    [55.75, 37.80],
                    [55.80, 37.90],
                    [55.75, 38.00],
                    [55.70, 38.00],
                    [55.70, 37.80]
                ],
                // Координаты вершин внутреннего контура.
                [
                    [55.75, 37.82],
                    [55.75, 37.98],
                    [55.65, 37.90]
                ]
            ],
            // Задаем правило заливки внутренних контуров по алгоритму "nonZero".
            fillRule: "nonZero"
        },
        // Описываем свойства геообъекта.
        properties:{
            // Содержимое балуна.
            balloonContent: "Многоугольник"
        }
    }, {
        // Описываем опции геообъекта.
        // Цвет заливки.
        fillColor: '#00FF00',
        // Цвет обводки.
        strokeColor: '#0000FF',
        // Общая прозрачность (как для заливки, так и для обводки).
        opacity: 0.5,
        // Ширина обводки.
        strokeWidth: 5,
        // Стиль обводки.
        strokeStyle: 'shortdash'
    });

    // Добавляем многоугольник на карту.
    myMap.geoObjects.add(myGeoObject);

    // Создаем многоугольник, используя вспомогательный класс Polygon.
    var myPolygon = new ymaps.Polygon([
        // Указываем координаты вершин многоугольника.
        // Координаты вершин внешнего контура.
        [
            [55.75, 37.50],
            [55.80, 37.60],
            [55.75, 37.70],
            [55.70, 37.70],
            [55.70, 37.50]
        ],
        // Координаты вершин внутреннего контура.
        [
            [55.75, 37.52],
            [55.75, 37.68],
            [55.65, 37.60]
        ]
    ], {
        // Описываем свойства геообъекта.
        // Содержимое балуна.
        hintContent: "Многоугольник"
    }, {
        // Задаем опции геообъекта.
        // Цвет заливки.
        fillColor: '#00FF0088',
        // Ширина обводки.
        strokeWidth: 5
    });

    // Добавляем многоугольник на карту.
    myMap.geoObjects.add(myPolygon);
}


Далее прилагаю свой код:

<template>
  <div id="app">
    <yandex-map
      class="map-box"
      :coords="coords"
      :zoom="8"
      ref="map"
      @map-was-initialized="setMarker"
    >
      <ymap-marker
        :coords="coords"
        marker-id="1"
      />
    </yandex-map>
  </div>
</template>

<script>
import { loadYmap } from 'vue-yandex-maps';
import settings from './api/instance';

export default {
  name: 'App',
  data() {
    return {
      coords: [
        55.87,
        39.64,
      ],
    };
  },
  async mounted() {
    await loadYmap({ ...settings, debug: true });
    new ymaps.GeoObject({}); //вот здесь ругается eslint
  },
};
</script>


Помогите решить проблему, не могу понять, что делаю не так
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 1
@hitrick
Шаблоны вью компилируются в рендер функции и каждая со своим контекстом.
В целом это антипаттерн юзать глобальные переменные в компонентах, но если очень хочется, то есть вариант повесить это дело на прототип:
Vue.prototype.yamaps = … И он будет доступен во всех компонентах.
Либо, что-то мне подсказывает, что нужные методы можно достать из this.$refs.map, не зря же вы его туда повесили.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы