当前位置:首页 > 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中编写核心逻辑:

<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;
}

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

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>

注意事项

vue实现天气查询

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

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

相关文章

vue登录业务的实现

vue登录业务的实现

实现登录业务的基本流程 在Vue中实现登录业务通常涉及前端界面设计、表单验证、API请求交互、状态管理以及路由控制等环节。以下是核心实现步骤: 登录表单设计与验证 创建包含用户名和密码输入框的登录组…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

vue实现pie

vue实现pie

Vue 实现饼图 在 Vue 中实现饼图通常可以通过第三方图表库(如 ECharts、Chart.js 或 Highcharts)来完成。以下是使用 ECharts 和 Chart.js 的两种常见方…

vue实现Pop

vue实现Pop

Vue 实现 Popover 组件的方法 使用 Vue 内置指令 v-show/v-if 和事件监听 通过 Vue 的指令和事件绑定实现基础的 Popover 功能。定义一个布尔值控制 Popover…

vue 实现穿透

vue 实现穿透

Vue 样式穿透的实现方法 在 Vue 中,样式穿透通常指在带有 scoped 属性的样式块中,强制影响子组件的样式。以下是几种常见的实现方式: 使用 >>> 或 /deep/ 选…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式: 双…