ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ Π½Π° Vue JS

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ описываСтся созданный Vue JS ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для извлСчСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅ Π½Π° основС мСстополоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ настройка прилоТСнияя

ОзнакомлСниС с созданным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Vue.js.

Π‘Π°ΠΉΡ‚ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ создавался с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ использования Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Vue 3. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ устанавливаСтся Vue CLI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт быстро ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ шаблон Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π‘Ρ€Π΅Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ - Visual Studio Code.

Π”Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ API сСрвиса OpenWeatherMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» бСсплатно. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ мСстополоТСниС, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ OpenStreetMap – бСсплатная ΠΊΠ°Ρ€Ρ‚Π° всСго ΠΌΠΈΡ€Π°.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ состоит ΠΈΠ·: тСкстового поля поиска мСстополоТСния, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹, Π³Π΄Π΅ показываСтся Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ Π³ΠΎΡ€ΠΎΠ΄ ΠΈ Π² ΠΏΡ€Π°Π²ΠΎΠΉ части экрана Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π΅ ΠΏΠΎΠ³ΠΎΠ΄Ρ‹. ΠŸΡ€ΠΎΠ³Π½ΠΎΠ· ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° сСгодня ΠΈ Π½Π° блиТайшиС 5 Π΄Π½Π΅ΠΉ.

Основной интСрфСйс

Π’ тСкстовом ΠΏΠΎΠ»Π΅ поиска мСста, послС Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… примСняСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для поиска насСлённого ΠΏΡƒΠ½ΠΊΡ‚Π° Π² Π²ΠΈΠ΄Π΅ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ списка. Π”Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° русском ΠΈ английском языках.

Π€ΠΈΠ»ΡŒΡ‚Ρ€ поиска мСстополоТСния

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ПослС открытия Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°, Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ структура:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Vue ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ПояснСниС ΠΊ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ ΠΏΠ°ΠΏΠΊΠ°ΠΌ:

  • src – основной ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
  • ΠΏΠ°ΠΏΠΊΠ° js – javascript – Ρ„Π°ΠΉΠ»Ρ‹, содСрТащиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ миксины Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅
  • node_modules – исходный ΠΊΠΎΠ΄, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ сСрвисов ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠ°ΠΏΠΊΠΈ src:

  • App.vue – ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ интСрфСйса, Π² Π½Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ страницы
  • main.js – Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ собираСт ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
  • components – ΠΏΠ°ΠΏΠΊΠ°, Π³Π΄Π΅ находятся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса
  • pages – здСсь содСрТатся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ происходит навигация
  • router – содСрТит Ρ„Π°ΠΉΠ» router.js, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСт ΠΏΡ€Π°Π²ΠΈΠ»Π° построСния ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π² ΠΏΠ°ΠΏΠΊΠ΅ pages

Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, рСсурсы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка стран, Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ², насСлСнных ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ²

Π’ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ сущСствуСт мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСрвисов для получСния списка стран ΠΈ Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² ΠΌΠΈΡ€Π°, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ создан CSV-Ρ„Π°ΠΉΠ» с насСлёнными ΠΏΡƒΠ½ΠΊΡ‚Π°ΠΌΠΈ Π½Π° основС списка ООН для экономичСской Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»ΠΈ.

Бписок ООН ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС https://unece.org/trade/uncefact/unlocode. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…: csv, txt, mdb. Π”Π°Π½Π½Ρ‹Π΅ Π² этих Ρ„Π°ΠΉΠ»Π°Ρ… прСдставлСны Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UN/LOCODE β€” ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠΉ систСмС классификации гСографичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НСобходимыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: ΠΊΠΎΠ΄Ρ‹ стран согласно ISO 3166-1 alpha-2, Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ насСлСнного ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹.

Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† гСографичСских ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ мСстополоТСния содСрТит ΡˆΠΈΡ€ΠΎΡ‚Ρƒ/Π΄ΠΎΠ»Π³ΠΎΡ‚Ρƒ, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ стандартноС прСдставлСниС:  0000lat 00000long (lat - ΡˆΠΈΡ€ΠΎΡ‚Π°: N ΠΈΠ»ΠΈ S ; long - Π΄ΠΎΠ»Π³ΠΎΡ‚Π°: W ΠΈΠ»ΠΈ E)

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Papa Parse

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· CSV-Ρ„Π°ΠΉΠ»Π° Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² ΠΈ стран, Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Papa Parse, доступная ΠΏΠΎ ссылкС https://www.papaparse.com/. Данная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° позволяСт ΠΊΠ°ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· CSV, Ρ‚Π°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊ CSV-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρƒ. Π•Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ npm:

			npm install papaparse
		

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· CSV Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ CountriesCodes.vue:

			async parseCSV(fileCSV) {
    return new Promise(resolve => {
        Papa.parse(fileCSV, {
            header: false,
            download: true,
            complete: (results) => {
                resolve(results.data);
            }
        });
    });
}

		

БСрвис OpenWeatherMap

OpenWeatherMap – ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ сСрвис для прСдоставлСния API получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅. Π’ основном сСрвис ΠΏΠ»Π°Ρ‚Π½Ρ‹ΠΉ, Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ бСсплатный Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ API, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС https://openweathermap.org/, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΡ‡Π΅Ρ‚Π½ΡƒΡŽ запись ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свой API-ΠΊΠ»ΡŽΡ‡. Богласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, бСсплатно ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· Π½Π° 5 Π΄Π½Π΅ΠΉ Π² 3-Ρ… часовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ для ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹: Π²Ρ‹Π·ΠΎΠ² API ΠΏΠΎ гСографичСским ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌ – ΡˆΠΈΡ€ΠΎΡ‚Π΅ ΠΈ Π΄ΠΎΠ»Π³ΠΎΡ‚Π΅, Π²Ρ‹Π·ΠΎΠ² API ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ Π³ΠΎΡ€ΠΎΠ΄Π°.

Π’Ρ‹Π·ΠΎΠ² API: https://api.openweathermap.org/data/2.5/weather?lat={lat}&lon={lon}&appid={API key}. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π² XML ΠΈΠ»ΠΈ JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

ДокумСнтация ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ API

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ названия Π³ΠΎΡ€ΠΎΠ΄ΠΎΠ² Π² гСографичСскиС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ API Π³Π΅ΠΎΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ гСокодирования: api.openweathermap.org/data/2.5/forecast?q={city name}&appid={API key}

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ OpenWeatherMap ΠΈ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² основном ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ App.vue:

			async isFoundLocation(place, code) {
    if (place != '' && code != '') {
        // forecast type for today and 5 days
        let openWeatherType = '';
        if (this.forecastType == this.forecastTypes.now) {
            openWeatherType = 'https://api.openweathermap.org/data/2.5/weather?q=' + place + ',' + code + '&appid=' + this.weatherApi + "&lang=ru";
        }
        else {
            openWeatherType = 'https://api.openweathermap.org/data/2.5/forecast?q=' + place + ',' + code + '&appid=' + this.weatherApi + "&lang=ru";
        }
        return await fetch(openWeatherType)
            .then(res => res.json())
            .then(data => {
                …
                    return data;
            })
    }
…
}, //isFoundLocation

		

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ place, code ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ·  CountriesTextBox.vue – Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ насСлённого ΠΏΡƒΠ½ΠΊΡ‚Π°, ΠΊΠΎΠ΄ страны согласно ISO 3166-1 alpha-2.

БСрвис OpenStreetMap

OpenStreetMap (OSM) – это бСсплатный, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ общСствСнный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΌΠΈΡ€Π°. Подобно Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ, Π΄Π°Π½Π½Ρ‹Π΅ OSM ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹, ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ всСми ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠΌΠΈ.

OSM прСдставляСт собой Π±Π°Π·Ρƒ картографичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° Π΅Ρ‘ основС. Π­Ρ‚Ρƒ Π±Π°Π·Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ. ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ дСлятся Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ‚ΠΈΠΏΠ°: Ρ‚ΠΎΡ‡ΠΊΠ°, линия, ΠΏΠΎΠ»ΠΈΠ³ΠΎΠ½ ΠΈ составной ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ OSM-ΠΊΠ°Ρ€Ρ‚Ρ‹ Π½Π° Π²Π΅Π±-сайт ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ картографичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ JavaScript, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ: Openlayers, Leaflet, Mapbox. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Openlayers.

OpenLayers – это ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° JavaScript для встраивания ΠΊΠ°Ρ€Ρ‚. Она распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. OpenLayers ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ OpenStreetMap ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚Ρ‹. Доступа ΠΏΠΎ ссылкС.

Openlayers ΠΈ Π½Π°Π±ΠΎΡ€ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ npm:

			npm install ol
npm install ol-ext

		

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Vue JS для отобраТСния ΠΊΠ°Ρ€Ρ‚ OpenStreetMap Ρ‡Π΅Ρ€Π΅Π· Openlayers:

			<template>
<div ref="map-root" style="width: 100%; height: 100%">
</div>
…
</template>
…
<script>
import View from 'ol/View'
import Map from 'ol/Map'
import TileLayer from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
import 'ol/ol.css'
…
export default {
mounted() {
   new Map({
        // shows the map for the 'map-root' ref
        target: this.$refs['map-root'],
        layers: [
            // background tiled layer
            new TileLayer({
                source: new OSM() 
            }),
        ],

        // the map with smallest zoom
        view: new View({
            zoom: 0,
            center: [0, 0],
            constrainResolution: true
        }),
    });

}, //mounted 
}
</script>

		

ОписаниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ прилоТСния

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ App.vue

Основной ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ App.vue собираСт вмСстС всС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ Π½Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ OpenWeatherMap API ΠΈ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для поиска насСлСнных ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠ², ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ ΠΈ ΠΊΠ°Ρ€Ρ‚Π° OpenStreetMap.

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ CountriesCodes.vue, CountriesTextBox.vue

CountriesCodes.vue – ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ CSV-Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ насСлСнных ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ… ΠΈ странах. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… происходит Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ beforeMount. Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· $emit:

			    async beforeMount() {
        await this.initialInit();
        this.$emit('getCodes', this.allCountriesCodes, this.allCountriesCities);
    },
…
    methods: {
        async initialInit() {
            this.allCountriesCities = await this.parseCSV(link);
            this.allCountriesCodes = await this.parseCSV(link);
        },

		

Π’ App.vue Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ:

			<template>
	…
    <countries-codes @getCodes="getCountriesCodes" />
</template>
…
    methods: {
…
        getCountriesCodes(codeName, cityName) {
            this.countriesCodes = codeName;
            this.countriesCities = cityName;
        },
}

		

CountriesTextBox.vue – ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт тСкстовоС ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° ΠΈ поиска мСстополоТСния. ΠŸΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ тСкста появляСтся Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ, ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ список для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ мСстополоТСния. Π’Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎ формируСтся Π½Π° основС манипуляций css-свойств для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² HTML.

CountriesTextBox.vue ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ CSV-Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· App.vue:

			export default {
…     
props: {
        countriesCodesFilter: {
            type: Array,
            required: true
        },
        countriesCitiesFilter: {
            type: Array,
            required: true
        }
    },

		

ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ мСсто, страну ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сСрвису ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ Π² App.vue ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

			this.$emit(
    "getLocation",
    this.getCityInput().value,
    this.getCityInput().dataset.cityeng,
    this.getCityInput().dataset.country,
    this.getCityInput().dataset.countrycode,
    this.getCityInput().dataset.coord
);

		

Π”Π°Π»Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² App.vue ΠΎΡ‚ CountriesTextBox.vue происходит Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ getLocation:

			<template>
…
<countries-text-box v-bind:countriesCodesFilter="countriesCodes" 
    v-bind:countriesCitiesFilter="countriesCities"
    @getLocation="getLocation" @searchClick="searchLocationClick"
    @clearClick="clearClick" />
</template>
…
<script>
export default {
…
    methods: {
        /**
        * finds openweathermap location though text search area
        * paramCity - city in the textbox
        * paramCityEng - city in English
        * paramCountry - country name
        * paramCountryCode - country code
        * paramCoord - coordinates of the city
        */
async getLocation(paramCity, paramCityEng, paramCountry, paramCountryCode, paramCoord) {
…
}

}
}

		

ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ происходит навигация ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. Для этого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ нСобходимая Π±ΠΈΠ±Π»ΠΈΡ‚Π΅ΠΊΠ°:

			npm install vue-router
		

Π Π°Π·Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ свои ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹: ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· сСйчас, Π½Π° сСгодня ΠΈ Π½Π° 5 Π΄Π½Π΅ΠΉ. ВсС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ находятся Π² ΠΏΠ°ΠΏΠΊΠ΅ src/pages: ForecastNow.vue, ForecastToday.vue, ForecastFiveDays.vue. Для описания ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² Π² Ρ„Π°ΠΉΠ»Π΅ src/router/router.js создаСтся массив с описаниСм ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΊ страницам Ρ€ΠΎΡƒΡ‚Π΅Ρ€Π°.

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° router.js :

			import ForecastNow from "@/pages/ForecastNow";
…
import { createRouter, createWebHistory } from "vue-router";
const routes = [
    {
        name: 'Now',
        path: '/ForecastNow',
        component: ForecastNow,
        props: true
    },
…
]
… 

		

Для Π²Ρ‹Π±ΠΎΡ€Π° Ρ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сайта Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π² ΠΏΡ€Π°Π²ΠΎΠΉ части экрана. Π—Π° созданиС Π²ΠΊΠ»Π°Π΄ΠΎΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ForecastTypeTabs.vue, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ обрисовываСт ΠΊΠ½ΠΎΠΏΠΊΠΈ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ/Π²ΠΊΠ»Π°Π΄ΠΊΠΈ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·Π° Ρ‡Π΅Ρ€Π΅Π· $emit Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ App.vue ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌ Ρ‚ΠΈΠΏΠ΅ ΠΏΠΎΠ³ΠΎΠ΄Ρ‹.

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ForecastTypeTabs.vue:

			  <div class="tab">
     <button  
        v-for="item in forecastTypes" 
        class="tablinks" 
        @click = "changeForecast($event, item)">
        {{ item }}
     </button>
  </div>
…
<script> 
      methods : {
        changeForecast(evt, type) {
…
              this.$emit('getForecastType',  type);
          } 
}

		

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ App.vue находится сам Ρ€ΠΎΡƒΡ‚Π΅Ρ€ <router-view> ΠΈ происходит навигация ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ страницС Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ getForecastType.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ForecastNow.vue, отвСтствСнному Π·Π° ΠΏΡ€ΠΎΠ³Π½ΠΎΠ· ΠΏΠΎΠ³ΠΎΠ΄Ρ‹ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚:

			this.$router.push({
    name: 'Now',
    params: {
        currentCity: this.locationCity,
        currentCountry: this.locationCountry,
        forecastData: JSON.stringify(foundData)
    }
});

		

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ ForecastNow.vue ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON ΠΎΡ‚ сСрвиса OpenWeatherMap, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Онлайн Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ ссылкС:

Бсылка Π½Π° исходный ΠΊΠΎΠ΄:

Настройка сборки

  • ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚
			git clone https://github.com/practicalDeveloper/weather_forecast_vue
		
  • Π²ΠΎΠΉΡ‚ΠΈ Π² ΠΏΠ°ΠΏΠΊΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°
			cd weather_forecast_vue
		
  • ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости
			npm install
		
  • Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
			npm run serve
		
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ