yandex-maps-unofficial / vue-yandex-map

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

Не работает с nuxt.js #20

Closed alekspetrov closed 6 years ago

alekspetrov commented 6 years ago

Благодарю за замечательный плагин, но обнаружилась проблема, плагин не работает с nuxt.js.

PNKBizz commented 6 years ago

Добрый день! Не могли бы вы прислать выпадающие ошибки? С нукстом не работал и плагин под него не тестировал, видимо пора начинать )

alekspetrov commented 6 years ago

Консоль выдает: Uncaught TypeError: Cannot read property 'offsetWidth' of null

alekspetrov commented 6 years ago

Судя по всему это происходит в виду отсутствия ноды карты, когда вызывается скрипт инициализации

alekspetrov commented 6 years ago

Ок, нашел решение. Это не проблема плагина. Это особенности работы с nuxt.js

/plugins/yandexMap.js (можно назвать как угодно)

import Vue from 'vue'
import YmapPlugin from 'vue-yandex-maps'

// Используем плагин только в браузере, на сервере он не работает
if (process.browser) {
  Vue.use(YmapPlugin)
}

/nuxt.config.js

module.exports = {
  // Выносим плагин в отдельный файл при сборке
  build: {
    vendor:  ['vue-yandex-maps']
  },
  // Подключаем плагин
  plugins: ['~/plugins/yandexMap.js']
}

Далее по документации добавляем <yandex-map>

PNKBizz commented 6 years ago

Круто =)

FullZero5 commented 6 years ago

alekspetrov, а поподробнее можно, что то не получается подключить в nuxt вроде все как ты описал выше

alekspetrov commented 6 years ago

@FullZero5, что говорит консоль?

FullZero5 commented 6 years ago

Uncaught TypeError: Cannot read property 'install' of undefined at Function.Vue.use (vue.runtime.esm.js:4405) at Object../plugins/yandexMap.js (yandexMap.js:5) at webpack_require (bootstrap 726d8e6bcadf593b3b17:712) at fn (bootstrap 726d8e6bcadf593b3b17:117) at Object../.nuxt/index.js (nuxt.vue:42) at webpack_require (bootstrap 726d8e6bcadf593b3b17:712) at fn (bootstrap 726d8e6bcadf593b3b17:117) at Object../.nuxt/client.js (App.vue:42) at __webpack_require__ (bootstrap 726d8e6bcadf593b3b17:712) at fn (bootstrap 726d8e6bcadf593b3b17:117)

FullZero5 commented 6 years ago

так import { yandexMap, ymapMarker } from 'vue-yandex-maps' или так import { yandexMap, ymapMarker } from '~/plugins/yandexMap.js' index.vue подключать? просто и так и так ошибка

alekspetrov commented 6 years ago

@FullZero5 нет, в самом компоненте его не надо подключать вообще =) nuxt сам его подключит и инициирует как внешний плагин, в этом вся загвоздка и была изначально, что он не может быть отрисован на стороне сервера. И в components: {} его прописывать не нужно. Только в разметке указать его <yandex-map> и его props указать. Сам ~/plugins/yandexMap.js выглядит у меня вот так:

import Vue from 'vue'
import YmapPlugin from 'vue-yandex-maps'

if (process.browser) {
  Vue.use(YmapPlugin)
}
FullZero5 commented 6 years ago

м ... ну хорошо я создал /plugins/yandexMap.js потом отредактировал /nuxt.config.js добавил plugins: ['~/plugins/yandexMap.js'] теперь на странице /page/index.vue вставил
yandex-map :coords="[54.62896654088406, 39.731893822753904]" zoom="10" style="width: 600px; height: 600px;" map-type="hybrid"

но карты нет ? в консоли все таже ошибка

alekspetrov commented 6 years ago

@FullZero5 а vendor добавил в nuxt config?

FullZero5 commented 6 years ago

нет

alekspetrov commented 6 years ago

@FullZero5 выше в описании решения есть

FullZero5 commented 6 years ago

Все завел проблема была в том что я /plugins/yandexMap.js указал так import {YmapPlugin} from 'vue-yandex-maps'