项目介绍

项目开源仓库:https://github.com/lilming0505/lmweather
首先这是一个基于uniapp框架开发的天气查询项目,目前呢只适配移动端,且仅在微信小程序上线
芝士二维码:
gh_be15d61fcc12_258 (1).jpg

主要实现的功能

  1. 10小时的天气预报
  2. 7天内的天气预报
  3. 空气指数
  4. 天气指数
  5. 生活指数

cf0b89f15f0196d0737b244e52304c3.pngcf0b89f15f0196d0737b244e52304c3.pngfff25dd55ab1377b4f4d2ab5ecf1223.png

城市切换

967526cda0f31c22c6655f6f549134f.pngaff222c8825a5a4c04858e80f0d02ec.png

暗夜模式的切换

点击城市选择最右边的按钮就可以切换主题了

3380940c7ccbab8b6c0cb5d6a807132.png

遇到的问题与我是如何克服的(有些没能克服555)

微信小程序合法域名的配置

我在这个项目中用了四个不同的天气api(因为有些api提供的数据不全或者要收费)
我在项目上线的最后阶段,发现有些天气数据获取不到了,还有阿里云数据库的城市列表和城市对应的id都获取失败了,代码肯定是没问题的,那肯定是配置哪里出问题了
解决方法:
在开发环境下,微信开发者工具默认不校验域名,但是在最后上线的时候要设置小程序的合法域名,像这样:
abeefa9dffeb32f970f4aa77d46cc55.png
但是,等一下,阿里云数据库的域名我从哪里拿到呢,代码里没有出现服务器域名,因为是直接在uniapp里关联了之后连接的,在阿里云控制台没找到,我在网上搜索了很久也没找到解决方法。在那天的晚上,我抓耳挠腮找不到解决方案,躺在床上准备放弃的时候,我灵光一现,把微信开发者工具的不校验合法域名去掉,不就会有报错提示“XXX”不是合法的域名了吗,那我就可以拿到服务器的域名了。现在想想其实是很好解决的,但是我当时却被卡了好久。

组件达不到自己想实现的效果

在我使用uniapp的自定义导航栏组件的时候,我发现这个导航栏下面总是有一条白色的实线,在白天模式下不明显,在暗夜模式下就很明显,而官方文档里也没有给出去除实线的方法。
解决方法:
修改组件的代码,打开组件的路径,打开文件,我猜这个实线的宽度为1px,查找定位到了之后,就把width改成0px就可以了

奇怪的下拉选择框(算是解决了)

uniapp给出了下拉选择框的组件,我需要两个下拉选择框,一个选择省份,一个选择市,但是当我点击第一个选择框时,也就是我选择了省份时,既执行了第一个组件的change事件,也执行了第二个组件的change事件,而且只在第一次点击组件时生效,之后就都正常了,这就导致我第一次选择省份时数据重新加载了一遍。
我的解决方案:
加一个bool类型的数据,初始值true,第一次点击改为false,第二组件的change事件判断一下,不是第一次点击才执行
虽然我解决了,但是这个问题的出现真的好迷

从数据库获取城市数据

我不但需要两级的城市列表,作为我城市选择框的数据,还需要城市对应的id来作为api的参数,我是下载了某个天气api的城市id表,做一些数据加工,由于数据太大了,不能直接放在本地里(浪费空间),更不能直接保存在页面里(内存直接炸了)
解决方法:
我用了uniCloud的阿里云数据库,直接用uniapp提供的方法,先添加数据,等数据导入了之后再去读取。

最后上线的效果和开发环境下的有差别(未解决)

这是上线环境:
Screenshot_20221007_220120_com.tencent.mm.jpg
这是开发环境:
[{0$U((HY$O58@UE]4~JNZN.png
如图,小程序上线之后图表把城市名给挡住了
修改了z-index也无济于事,看组件的代码也看不出什么端倪,完全没有头绪

获取定位(未解决)

uniapp官方提供了获取地址的接口和第三方的高德SDK
分别是:https://uniapp.dcloud.net.cn/api/location/location.html
https://ask.dcloud.net.cn/article/35070
但是这两种方法都试过了,都会报错,如果不用uniapp用小程序提供的接口是可以的,因为精力有限,也就没有继续研究了