当前位置:首页 > 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 实现主题的方法 使用 CSS 变量动态切换主题 定义全局 CSS 变量,通过修改这些变量实现主题切换。在 Vue 的根组件或全局样式中定义变量: :root { --primary-co…

vue怎么实现

vue怎么实现

Vue 实现方法 Vue 是一个流行的前端框架,用于构建用户界面。以下是几种常见的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。 <input v-m…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…

vue实现左右拉伸

vue实现左右拉伸

实现左右拉伸布局的方法 使用CSS Flexbox布局 Flexbox可以轻松实现左右拉伸的效果。通过设置display: flex和flex-grow属性,可以让元素填充可用空间。 <div…

原生实现vue功能

原生实现vue功能

原生JavaScript实现Vue核心功能 使用原生JavaScript模拟Vue的核心功能需要理解响应式数据绑定、虚拟DOM和组件系统等概念。以下是关键实现方法: 响应式数据系统 通过Object…

vue如何实现计算

vue如何实现计算

Vue 实现计算的方法 Vue 提供了多种方式来实现计算逻辑,包括计算属性、方法、侦听器等。以下是几种常见的实现方式: 计算属性(Computed Properties) 计算属性是基于它们的响应式…