【エラー内容】
TypeError: Cannot read property 'map' of undefined
at VueComponent.eval (Weather.vue?e729:61)
mapを使って値をdataに代入していたのですが、エラーが出ました。原因がわかる方いらっしゃいますか?
なにか簡単なことだとは思うのですが、時間が取られてしまい、質問させていただきました。
Vueファイル
1<template> 2 <b-container class="text-center"> 3 <div class="my-5"> 4 <h1 class="mb-3">天気情報</h1> 5 <select v-model="woeid" @change="getWeather"> 6 <option disabled value="">天気を見たい都市を指定してください</option> 7 <option value="1118370">Tokyo</option> 8 <option value="15015370">Osaka</option> 9 <option value="1117817">Nagoya</option> 10 </select> 11 </div> 12 13 <b-row cols="3" cols-sm="4" cols-md="6" cols-lg="7"> 14 <b-col v-for="info of infos" v-bind:key="info.date"> 15 <p>{{ info.date }}</p> 16 <p>{{ info.max_temp | roundUp }}°C</p> 17 <p>{{ info.wind }}</p> 18 <p>{{ info.weather_state }}</p> 19 <img v-bind:src="info.image_url" /> 20 </b-col> 21 </b-row> 22 </b-container> 23</template> 24 25<script> 26import axios from "axios"; 27 28export default { 29 data() { 30 return { 31 woeid: null, 32 infos: [], 33 }; 34 }, 35 methods: { 36 getWeather: function () { 37 // 配列ymdに前後1週間の日付を代入 38 var ymd = [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6].map((value) => { 39 var dt = new Date(); 40 dt.setDate(dt.getDate() + value); 41 var y = dt.getFullYear(); 42 var m = ("00" + (dt.getMonth() + 1)).slice(-2); 43 var d = ("00" + dt.getDate()).slice(-2); 44 return "/" + y + "/" + m + "/" + d + "/"; 45 }); 46 47 var getDataUrl = ymd.map((num) => { 48 return ( 49 "https://********.herokuapp.com/https://www.metaweather.com/api/location/" + 50 this.woeid + 51 num 52 ); 53 }); 54 55 axios 56 .get(getDataUrl) 57 .then( 58 function (response) { 59 this.infos = response.data.consolidated_weather.map((weather) => { 60 return { 61 date: weather.applicable_date, //日付 62 max_temp: weather.max_temp, //最高気温 63 wind: weather.wind_direction_compass, //風向き 64 weather_state: weather.weather_state_name, //天候 65 image_url: 66 "https://www.metaweather.com/static/img/weather/ico/" + 67 weather.weather_state_abbr + 68 ".ico", //天気画像 69 }; 70 }); 71 }.bind(this) 72 ) 73 .catch(function (error) { 74 console.log(error); 75 }); 76 }, 77 }, 78 filters: { 79 roundUp(value) { 80 return Math.ceil(value); 81 }, 82 }, 83}; 84</script> 85 86<style> 87p { 88 margin: 5px; 89} 90</style>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。