微信小程序开发五:案例实践

摘要:
在小程序中,会向地址发送请求,需要将百度界面的域名预先设置为小程序的合法请求域名。图21-7小程序服务器配置需要注意,小程序目前只支持https协议。使用前,需要确定域名接口是否受支持。在微信Web开发工具中,单击左侧导航刷新并同步“项目”中的域名信息。
5.1天气预报

在这一节中,我们将开发一个天气预报的小程序,使用的数据接口为百度天气预报的接口,该接口可以根据经纬度坐标查询所在地天气。
准备工作
使用百度接口需要预先申请。在本书第4章中有百度ak的申请方法以及百度天气预报接口介绍。所不同的是第4章使用城市名称查询天气,而本节中使用坐标进行查询。
在小程序中,将会向该地址发起请求,需要预先将百度接口所在域名设置到小程序的request合法域名中。如图21-7所示。
微信小程序开发五:案例实践第1张
图21-7小程序服务器配置
需要注意的是,小程序目前只支持https协议,使用之前需要确定域名接口是否支持。如果是自己的服务器,需要配置安全证书等操作。
在微信Web开发者工具中,点击左侧导航,在“项目”中将域名信息进行刷新同步。如图21-8所示。
微信小程序开发五:案例实践第2张

图21-8 域名配置同步
选项配置
项目文件列表如图21-9所示,程序只有一个页面index,该页面有相应的js、wxml、wxss文件,另外有一个公共模块common.js用于获取外部数据。
微信小程序开发五:案例实践第3张

图21-9域名配置同步
小程序配置文件app.json的配置如下所示。

{
  "pages":[
    "pages/index/index"
  ],
  "window":{
    "backgroundTextStyle":"light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "天气预报",
    "navigationBarTextStyle":"black"
  },
  "networkTimeout": {
    "request": 10000
  },
  "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 = "ECe3698802b9bf4457f0e01b544eb6bb";
    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: 1;
}
.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 {
   96rpx;
  height: 96rpx;
  transition: 400ms;
}

上述页面文件和样式表,都是从微信官方Demo中移植而来。
最终实现的天气预报小程序效果如图21-10所示。
微信小程序开发五:案例实践第4张

图21-10天气预报小程序效果图

小结

本章介绍了微信小程序的开发接口及使用方法。微信小程序的视图层和WeUI一致,逻辑层JS接口体系与微信JS SDK有相通之处。最后提供了一个根据地理位置自动查询当前位置的天气预报案例,可帮助读者快速上手一个小程序的开发

源码下载:https://files.cnblogs.com/files/zhijiangch/fangbei-xiaochengxu-weather.zip

免责声明:文章转载自《微信小程序开发五:案例实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#访问Java的WebService添加SOAPHeader验证的问题软件测试_Fiddler抓包工具一下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

workerman——配置小程序的wss协议

前言 服务器: 阿里云服务器 | 需要在安全组放开443端口和workerman需要的端口 环境: oneinstack|lnmp oneinstack添加虚拟主机的时候选择第三个即可 | 这个添加虚拟主机后面大家觉得要写个详细的或者有问题的话可以私信我 服务器端配置 workerman官方文档 http://doc.workerman.net/faq/...

企业微信的数据打通

前言 当企业使用企业微信营销时,会添加企业的相关公众号、微信小程序等应用,因此企业可以获取客户的unionid,做到数据打通。从而知道客户在企业的公众号、微信小程序中进行了哪些行为,进而可以了解用户的需求,给客户进行精准营销。那么企业是如何获取用户的unionid的呢? 一、如何理解unionid? 我们把每个接入微信的应用(公众号、APP)比作一个独立的...

最佳实践丨使用云函数+云调用,四步搞定微信支付

概述 微信支付是云开发原生支持的微信生态能力之一,开发者只需要简单调用相应的函数即可完成整套支付流程,安全又高效。部分优势包括: 无需关心证书、签名,支付流程简化; 基于微信私有协议和私有链路,更加安全、高效; 免运维,高可用性; 按需扩容,弹性伸缩,按量计费,成本缩减; 支持通过云函数接受支付回调,无需自建回调服务。 流程对比:传统流程 vs 云开发...

微信小程序开发笔记(上)

Ø简介 本文主要记录微信小程序的开发笔记(上),主要包括以下内容: 1.微信小程序基础 2.布局 3.视图容器 4.视图层技术 5.基础组件 6.表单组件 1.微信小程序基础 1)微信小程序介绍 具有出色的体验,可以被便捷地获取与传播,适合有服务内容的企业和组织注册。 2)开发环境安装与配置 1.首先,下载开发IDE(微信开发者工具) https://...

android开发游记:ItemTouchHelper 使用RecyclerView打造可拖拽的GridView

以下是RecyclerView结合ItemTouchHelper实现的列表和网格布局的拖拽效果。 效果图例如以下:(gif图有点顿卡,事实上执行是非常流畅的) demo下载地址: DragRecyclerView 怎样实现那么是怎样实现的呢?主要就要使用到ItemTouchHelper ,ItemTouchHelper 是support-v7包中加入...

「微信云托管」首篇实战|极简DEMO入门

一、项目介绍 此项目基于微信云托管能力范围编写,构建了一个简单的 WEB 后端服务,统计 WEB 网页的访问日志,并保存至 serverless 形态的 mysql 数据库中,然后在小程序中调用服务接口,获得访问次数。 项目包含微信云托管在单体运行中的基础能力使用,包含基础容器、mysql、微信小程序调用等。 项目技术栈:后端服务(nodejs + exp...