微信小程序开发(1) 天气预报
本文介绍如何使用微信小程序开发天气预报功能。
一、项目文件列表

二、小程序配置
使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。
{
  "pages":[
    "pages/index/index"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "天气预报",
    "navigationBarTextStyle":"black"
  },
  "networkTimeout": {
    "request":
  },
  "debug": true
}
由于项目只有一个页面,所以不需要底部tab。另外设置网络请求时间为10秒,并且启用调试模式。
三、小程序逻辑层
首先在common.js中使用获取用户当前地理位置接口获取用户的坐标地址,坐标类型选择gcj02。
//获取当前位置坐标
function getLocation(callback) {
    wx.getLocation({
        type: 'gcj02',
        success: function(res) {
            callback(true, res.latitude, res.longitude);
        },
        fail: function() {
            callback(false);
        }
    })
}
Wx.getlocation调用成功之后,将坐标信息返回给callback函数。失败时将false传给callback函数。
获取到坐标之后,再使用百度接口查询天气。相应的查询代码如下所示。
function getWeather(latitude, longitude, callback) {
    var ak = "";//换成自己的ak,不要用方倍工作室的
    var url = "https://api.map.baidu.com/telematics/v3/weather?location=" + longitude + "," + latitude + "&output=json&ak=" + ak;
    wx.request({
        url: url,
        success: function(res){
            console.log(res);
            callback(res.data);
        }
    });
}
在上述代码中,先定义百度接口的ak,再通过拼接参数构造url的其他部分。然后调用 wx.request 请求天气预报数据。
接下来把上述接口组合起来,组成给应用层的接口,相应代码如下所示。
function loadWeatherData(callback) {
    getLocation(function(success, latitude, longitude){
        getWeather(latitude, longitude, function(weatherData){
            callback(weatherData);
        });
    });
}
最后通过 module.exports对外暴露该接口。代码如下所示。
module.exports = {
    loadWeatherData: loadWeatherData
}
四、小程序页面与视图
在页面文件中,使用 require 将公共代码引入。代码如下所示。
//index.js
var common = require('common.js') Page({
data: {
weather: {}
},
onLoad: function () {
var that = this;
common.loadWeatherData(function(data){
that.setData({
weather: data
});
});
}
})
在页面的Page函数中, data定义为天气的初始化数据,该数据将会以 JSON 的形式由逻辑层传至渲染层。在 onLoad 方法中,使用common中的 loadWeatherData 方法获取天气数据并设置到 UI 上,并将取到的数据使用 setData 方法将它设置到数据层中。
在页面的界面实现中,相应的代码如下所示。
<!--index.wxml-->
<view class="container">
<view class="header">
<view class="title">{{weather.results[0].currentCity}}</view>
<view class="desc">{{weather.date}}</view>
</view> <view class="menu-list">
<view class="menu-item" wx:for="{{weather.results[0].weather_data}}" wx:key="*this">
<view class="menu-item-main">
<text class="menu-item-name">{{item.date}} {{item.weather}} {{item.wind}} {{item.temperature}}</text>
<image class="menu-item-arrow" src="{{item.dayPictureUrl}}"></image>
</view>
</view>
</view>
</view>
最外层是一个 class 为 container 的 View,它的里面放了2个子 View,分别用于存放页面头和页面列表。页面头中存放城市名称和时间。页面列表用于存放最近几天的天气情况。
页面的样式表实现如下所示。
.header {
  padding: 30rpx;
  line-height:;
}
.title {
  font-size: 52rpx;
}
.desc {
  margin-top: 10rpx;
  color: #888888;
  font-size: 28rpx;
}
.menu-list {
  display: flex;
  flex-direction: column;
  background-color: #fbf9fe;
  margin-top: 10rpx;
}
.menu-item {
  color: #000000;
  display: flex;
  background-color: #fff;
  margin: 10rpx 30rpx;
  flex-direction: column;
}
.menu-item-main {
  display: flex;
  padding: 40rpx;
  border-radius: 10rpx;
  align-items: center;
  font-size: 32rpx;
  justify-content: space-between;
}
.menu-item-arrow {
  width: 96rpx;
  height: 96rpx;
  transition: 400ms;
}
上述页面文件和样式表,都是从微信官方Demo中移植而来。
最终实现的天气预报小程序效果如图所示。

五、源码下载
扫描下方二维码并关注公众账号,回复 “1235” 获取

源代码使用方法,请参考 微信小程序开发入门教程
微信小程序开发(1) 天气预报的更多相关文章
- 微信小程序开发学习资料
		
作者:初雪链接:https://www.zhihu.com/question/50907897/answer/128494332来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
 - 微信小程序开发心得
		
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
 - 【微信小程序开发•系列文章六】生命周期和路由
		
这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...
 - 微信小程序开发日记——高仿知乎日报(下)
		
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
 - 微信小程序开发日记——高仿知乎日报(中)
		
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
 - 微信小程序开发日记——高仿知乎日报(上)
		
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
 - 微信小程序开发工具测评
		
1月9日微信小程序正式上线.很多企业都希望能在这个.但是在技术开发的问题上,却不知道该如何下手.经过一些程序员不辞辛苦连夜测试,终于从十余款工具呕心沥血筛选出四款比较靠谱实用的微信小程序开发工具.接下 ...
 - 微信小程序开发工具的数据,配置,日志等目录在哪儿? 怎么找?
		
原文地址:http://www.wxapp-union.com/portal.php?mod=view&aid=359 本文由本站halfyawn原创:感谢原创者:如有疑问,请在评论内回复 ...
 - 微信小程序开发工具使用与设计规范(二)
		
[未经作者本人同意,请勿以任何形式转载] 上一篇文章主要分析了微信小程序应用场景和优劣势.本篇你可以学习到: 如何使用小程序开发工具写一个Hello World 微信小程序设计规范 微信小程序项目结构 ...
 
随机推荐
- 使用TensorFlow实现分类
			
这一节使用TF搭建一个简单的神经网络用于分类任务,首先把需要的包引入,另外为了防止在多次运行中一些图中的tensor在内存中影响实验,采取重置操作: import tensorflow as tf i ...
 - codeforces625C
			
K-special Tables CodeForces - 625C 人们经常做一些疯狂的事来凸显自己.有的人跳舞,有的人撩妹,有的人立志成为顶级程序猿(例如某peng),还有的人喜欢收集有趣的数学对 ...
 - BZOJ4455 ZJOI2016小星星(容斥原理+树形dp)
			
相当于给树上的每个点分配一个编号使父亲和儿子间都有连边. 于是可以考虑树形dp:设f[i][j][k]为i号点的编号为j,其子树中编号集合为k的方案数.转移显然.然而复杂度3n·n3左右,具体我也不知 ...
 - 2015 HIAST Collegiate Programming Contest D
			
You have been out of Syria for a long time, and you recently decided to come back. You remember that ...
 - 学习Spring Boot:(二十四)多数据源配置与使用
			
前言 随着业务量增大,可能有些业务不是放在同一个数据库中,所以系统有需求使用多个数据库完成业务需求,我们需要配置多个数据源,从而进行操作不同数据库中数据. 正文 JdbcTemplate 多数据源 配 ...
 - 洛谷 [HNOI2014]道路堵塞 解题报告
			
[HNOI2014]道路堵塞 题意 给一个有向图并给出一个这个图的一个\(1\sim n\)最短路,求删去这条最短路上任何一条边后的最短路. 又事SPFA玄学... 有个结论,新的最短路一定是\(1\ ...
 - Eclipse 插件Maven在使用 add dependency,找不到包,解决办法
			
通过右键单击pom.xml文件选择maven –> add dependency 或者是打开pom.xml文件,选择dependencies –>add 时,搜索不到依赖的jar包,解决方 ...
 - sklearn 总结
			
一张思维导图总结一下用到的大体模块:
 - Centos6.5的MySQL5.7.15二进制源码单机版安装
			
0.说明 最近在CentOS6.5上安装mysql,想要知道具体的安装过程,不想要通过yum直接一键安装,折腾一番,但是总遇到些麻烦.于是将mysql文档中的关于如何在Linux上安装mysql的部分 ...
 - A1097. Deduplication on a Linked List
			
Given a singly linked list L with integer keys, you are supposed to remove the nodes with duplicated ...