我知微风意 🤡| Vue.js手搓天气组件

抢救完水课"地球科学概论" , 我独自一人走在回寝室的路上,路灯冷白的光洒下,将我的影子拉得时长时短。

周围的一切都显得那么安静,而我的思绪却在这宁静之中开始飘飞 :

这微风中夹杂着淡淡寒意 , 是在提醒我多穿衣服吧 , 还是在说我明天的水课考试 : 风萧萧兮易水寒 ,壮士一去不复返 ~

困在代码里太久 , 今天刚好想搓一个天气组件 , 感知一下这个真实世界的冷暖 ~

回到寝室 , 我从书包拿出"滚烫"的电脑 , 扔掉背了几个小时的书 , 插上电源 , 开始回顾所学 , 并开始构思这个组件的设计 。

我想做的是下面这样的组件

之所以说这个是组件 , 视角在于我将其放在一个庞大的项目之中的 , 我们可以称之为天气组件 , 于是我开始构思 ......

对于组件化思想的理解 ,可以看我的这篇文章

Vue与React| 组件化思想与CLI命令行

我的编码思路:

  • 实现静态页面

  • 实现动态组件

  • 动态显示初始化数据

    • 天气------ 调用高德地图的 api
    • 时间

使用 vite + vue 的方式初始化项目后 , 根据我预先想好的思路 , 开始搓

首先实现静态页面

分为导航栏和主体来搓


js 复制代码
<template>
  <div class="container">
    <!-- 导航 -->
    <!-- html5 语义化标签 -->
    <nav class="nav">
      <div class="time">{{localTime}}</div>
      <div class="city">切换城市</div>
    </nav>
    
    <main class="city-info">
      <div class="city-name">{{weatherData.city}}</div>
      <div class="weather">{{weatherData.weather}}</div>
      <h2 class="temp">
        <em>{{weatherData.temperature}}</em>C
      </h2>
      <div class="detail">
        <span>风力: {{weatherData.windPower}}级</span>
        <span>风向: {{weatherData.windDirection}}</span>
        <span>空气湿度: {{weatherData.humidity}}</span>
      </div>
    </main>
    <!-- 天气 -->
  </div>
</template>

<script setup>

</script>

<style scoped>
.container {
  min-height: 100vh;
  background-color: #000;
  opacity: 0.6;
  color: #fff;
}
.nav {
  /* position: absolute; */
  overflow: auto;
  padding: 10px;
}
.city {
  float: right;
}
.time {
  float: left; 
}
.city-info {
  text-align: center;
}
.temp {
  font-size: 26px;
}
.temp em {
  font-size: 34px;
}
</style>

实现动态组件和数据交互

js 复制代码
<script setup>

import { ref , onMounted} from "vue"
import AMapLoader from "@amap/amap-jsapi-loader"
const localTime = ref("00:00-------------")
const weatherData = ref({
  city: "北京",
  weather: "晴",
  temperature: 20,
  windPower: 1,
  windDirection: "东北",
  humidity: 50
})
// 调用高德地图的api
const init_map = () =>{
  AMapLoader.load({
    key:'your-key',
    version : "2.0" ,
    plusins:['AMap.CitySearch']
  }).then(AMap =>{
    AMap.plugin('AMap.CitySearch',()=>{
      let citySearch = new AMap.CitySearch();
      citySearch.getLocalCity((status,result)=>{
        if(status === 'complete' && result.info === 'OK'){
          if(result && result.city && result.bounds){
            let cityName = result.city.replace(/市$/,'');
            weatherData.value.city = cityName;
          }
        }
      })
    })
  })
}
// 组件挂载完成时,调用init_map方法
onMounted(()=>{
  init_map()
  setInterval(()=>{
     localTime.value = new Date().toLocaleString()
  })
})

</script>

总结

原谅我水文 ,就当小 demo 实现吧👀 , 当我的一次生活随笔 ~ , 且行且记

相关推荐
开发者小天18 分钟前
为什么 /deep/ 现在不推荐使用?
前端·javascript·node.js
如白驹过隙1 小时前
cloudflare缓存配置
前端·缓存
excel1 小时前
JavaScript 异步编程全解析:Promise、Async/Await 与进阶技巧
前端
Jerry说前后端1 小时前
Android 组件封装实践:从解耦到架构演进
android·前端·架构
步行cgn2 小时前
在 HTML 表单中,name 和 value 属性在 GET 和 POST 请求中的对应关系如下:
前端·hive·html
hrrrrb2 小时前
【Java Web 快速入门】十一、Spring Boot 原理
java·前端·spring boot
一枚小小程序员哈2 小时前
基于Vue的个人博客网站的设计与实现/基于node.js的博客系统的设计与实现#express框架、vscode
vue.js·node.js·express
找不到工作的菜鸟2 小时前
Three.js三大组件:场景(Scene)、相机(Camera)、渲染器(Renderer)
前端·javascript·html
定栓2 小时前
vue3入门-v-model、ref和reactive讲解
前端·javascript·vue.js
专注API从业者2 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink