У вас есть две проблемы:
Сначала вход связывается с currentWeather.name вместо currentCity
Во-вторых, у вас есть запрос axios в смонтированном жизненном цикле. Даже если модель CurrentCity изменится, вы не определяете, что
произойдет, когда это изменится. Вам нужно добавить вызов API, когда текущий город меняется.
Изменить модель входа на currentCity <input type="text" v-model="currentCity">
Переместить запрос axios на собственный метод
getWeather() {
const url = 'https://api.openweathermap.org/data/2.5/weather?q=' + this.currentCity + ',' + this.currentCountry + '&appid=fe435501a7f0d2f2172ccf5f139248f7&units=' + this.unit + '';
axios.get(url)
.then((response) => {
this.currentWeather = response.data;
})
.catch(function(error) {
console.log(error);
})
}
Привязать изменение ввода к методу getWeather
Вы можете добавить событие getWeather к методу ввода для ввода currentCity.
<input type="text" v-model="currentCity" @input="getWeather">
или добавить наблюдателя для текущей погоды
watch: {
currentCity: function(newCity, oldCity) {
this.getWeather();
}
}
бонус
каждый раз, когда вы записываете или стираете букву ввода, метод сработает. Добавьте отклик или таймаут, и он сработает через миллисекунды.
// import Axios
import axios from "axios"
export default {
name: "Home",
props: {
msg: String,
},
data() {
return {
currentWeather: null,
currentCity: 'Montreal',
currentCountry: 'ca',
unit: 'imperial'
};
},
watch: {
currentCity: function(newCity, oldCity) {
this.debounceGetWeather();
},
},
mounted() {
this.getWeather();
},
methods: {
debounceGetWeather() {
setTimeout(() => {
this.getWeather();
}, 300);
},
getWeather() {
axios.get('https://api.openweathermap.org/data/2.5/weather?q=' + this.currentCity + ',' + this.currentCountry + '&appid=fe435501a7f0d2f2172ccf5f139248f7&units=' + this.unit + '')
.then((response) => {
this.currentWeather = response.data '
})
.catch(function(error) {
console.log(error);
})
},
},
};