当前位置:首页 > VUE

vue实现天气查询

2026-01-15 05:48:16VUE

Vue实现天气查询功能

准备工作 确保已安装Vue CLI或通过CDN引入Vue.js。需要注册天气API服务(如和风天气、OpenWeatherMap等)获取API密钥。

项目结构

src/
├── components/
│   └── Weather.vue
├── App.vue
└── main.js

实现步骤

安装axios 通过npm或yarn安装axios用于API请求:

npm install axios

创建天气组件 在Weather.vue中编写核心逻辑:

vue实现天气查询

<template>
  <div class="weather-container">
    <input v-model="city" placeholder="输入城市名称" />
    <button @click="getWeather">查询</button>
    <div v-if="weatherData">
      <h3>{{ weatherData.city }}</h3>
      <p>温度: {{ weatherData.temp }}°C</p>
      <p>天气: {{ weatherData.condition }}</p>
    </div>
  </div>
</template>

<script>
import axios from 'axios';

export default {
  data() {
    return {
      city: '',
      weatherData: null,
      apiKey: 'YOUR_API_KEY', // 替换为实际API密钥
      apiUrl: 'https://api.openweathermap.org/data/2.5/weather'
    };
  },
  methods: {
    async getWeather() {
      try {
        const response = await axios.get(`${this.apiUrl}?q=${this.city}&appid=${this.apiKey}&units=metric`);
        this.weatherData = {
          city: response.data.name,
          temp: Math.round(response.data.main.temp),
          condition: response.data.weather[0].main
        };
      } catch (error) {
        console.error('获取天气失败:', error);
        alert('城市不存在或查询失败');
      }
    }
  }
};
</script>

API参数说明

  • units=metric 表示使用摄氏温度
  • OpenWeatherMap的免费版API每分钟限制60次请求
  • 需要将YOUR_API_KEY替换为实际获得的密钥

样式优化 添加基础样式增强用户体验:

.weather-container {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
}

input, button {
  padding: 8px;
  margin-right: 10px;
}

button {
  background: #42b983;
  color: white;
  border: none;
  cursor: pointer;
}

错误处理增强 可扩展的错误处理方案:

vue实现天气查询

methods: {
  async getWeather() {
    if (!this.city.trim()) {
      alert('请输入城市名称');
      return;
    }

    try {
      // ...原有请求代码
    } catch (error) {
      if (error.response) {
        switch (error.response.status) {
          case 404:
            alert('城市不存在');
            break;
          case 401:
            alert('API密钥无效');
            break;
          default:
            alert('服务暂时不可用');
        }
      }
    }
  }
}

国内API替代方案 如需使用国内天气服务(如和风天气),需修改API地址和参数:

apiUrl: 'https://devapi.qweather.com/v7/weather/now',
params: {
  key: this.apiKey,
  location: this.city,
  lang: 'zh'
}

组件注册 在App.vue中引入并使用组件:

<template>
  <div id="app">
    <Weather />
  </div>
</template>

<script>
import Weather from './components/Weather.vue'

export default {
  components: { Weather }
}
</script>

注意事项

  1. API密钥应存储在环境变量中(如.env文件),避免硬编码
  2. 生产环境需考虑添加请求节流(throttle)或防抖(debounce)
  3. 可添加加载状态提示提升用户体验
  4. 部分天气API需要后端代理请求以避免CORS问题

标签: 天气vue
分享给朋友:

相关文章

vue实现单选

vue实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选功能。单选按钮的…

vue实现签名

vue实现签名

实现Vue签名功能的步骤 安装签名库 使用vue-signature库可以快速实现签名功能。通过npm或yarn安装: npm install vue-signature --save # 或 ya…

vue实现密码

vue实现密码

Vue 密码输入组件实现 基础密码输入框实现 使用 Vue 的 v-model 指令绑定数据,并通过 type="password" 设置输入类型为密码: <template>…

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <d…

vue实现弹窗可切换

vue实现弹窗可切换

实现弹窗可切换的 Vue 方案 动态组件切换 通过 Vue 的 <component :is="currentComponent"> 动态加载不同弹窗组件,结合 v-if 控制显示状态。…