微信小程序面世以来受的高度关注颇多,直至最近我才动手尝试展开了小程序的研发,总体上感觉还是极好的,有一点不适应环境的就是必须彻底摆脱Web APP研发对DOM的操作方式。在这里我就把我就是如何利用API研发微信小程序的过程译成教程,教导大家快速上手体验一次微信小程序的研发。
在已经开始之前我们先来看下成品的效果图
准备工作工作
我们先确认想研发一款什么样的小程序,首先必须合乎「大」,因为我们这次就是必须体验小程序的研发,所以尽量不要弄得太繁杂;其次就是「慢」,小程序里须要的数据啊、资源啊,最出色就是非常简单就有的,自己写下个API什么的这就太耗时了,就不叫做快速初学者了。
所以呢,如果能够调用非常简单的API那就是极好的,经过一番挑选出,我挑选了生成数据的 历史上的今天 这个API,调用这个API获取数据,我们只要搞2个页面就可以全然展现出了,又「大」又「慢」哈XD
API一枚: 「历史上的今天」
微信小程序 开发者工具
备注: API须要登记注册之后赢得KEY就可以采用,具体内容恳请查阅 生成数据 官方文档,这里预设各位已经登记注册并具有适当API所需的KEY
工程结构
微信开发者工具的加装和采用在这里就不多并作了解了,存有疑点的话可以看看微信官方的 轻便教程
先建立一个工程,依次页面「嵌入项目」--「无AppID」,然后寄出「项目名称」并挑选「项目目录」,页面「嵌入项目」
然后我们去清扫一下预设工程的目录结构,删掉以下目录和文件
pages/logs/
pages/index/index.wxss
建立以下目录和文件
pages/logs/
pages/index/index.wxsspages/detail/
pages/detail/detail.js
pages/detail/detail.wxml
pages/templates/
pages/templates/item.wxml
res/
现在你看见的目录结构必须就是这样子的
.
├── app.js
├── app.json
├── app.wxss
├── pages
│ ├── detail
│ │ ├── detail.js
│ │ └── detail.wxml
│ ├── index
│ │ ├── index.js
│ │ └── index.wxml
│ └── templates
│ └── item.wxml
├── res
└── utils
└── util.js
这就是我们工程目录的最终结构了,后面还可以嵌入资源进来,但是整体结构还是这样不能发生改变的
修正布局
微信小程序就是通过修正 app.json 文件发生改变全局布局的,具体内容的可以布局项恳请各位自行查询小程序文档的 布局 一节
关上 app.json ,修正成
{
"pages":[
"pages/index/index",
"pages/detail/detail"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#3e3e3e",
"navigationBarTitleText": "历史今日",
"navigationBarTextStyle":"white"
},
"debug": true
}
我们这里修正了导航系统栏的背景颜色(navigationBarBackgroundColor)、标题颜色(navigationBarTextStyle)以及标题内容(navigationBarTitleText),为了便利查阅调试信息,我还打开了debug模式
全局布局以及搞掂啦,接下来正式宣布已经开始编码
首页布局
前面已经说道了我们必须搞的就是「历史上的今天」这样的一个小程序,所以同一个日期可以存有很多条目,最常用的布局就是制成列表
列表里可以存有很多的条目,数量就是不确认的,所以我们无法在页面里写下死去了布局,这时候就要使用 模板(template) 了,我们可以在模板中定义代码片段,然后在相同的地方调用
我们去定义一个模板,关上 pages/templates/item.wxml ,嵌入代码
备注: 模板的采用细节恳请参照官方文档 模板 一节
接下来关上 pages/index/index.wxml 删除里面的内容,我们必须在这里撰写列表页,这里可以采用至我们上面定义的模板
可以注意到第一行采用了 import 将模板导入至页面中,然后再采用 is 属性,声明须要采用的模板,用 data 属性传至数据可供模板采用
备注: 模板具有自己的作用域,就可以采用 data 传至的数据
为了测试和查阅布局效果,我们关上 pages/index/index.js 删掉里面的代码,然后嵌入以下代码手动建立数据传至给页面图形
Page({
data: {
hidden: true,
events: [
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
},
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
},
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
},
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
},
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
},
{
date: "2016-10-14",
title: "TodayOnHistory, 历史上的今天"
}
]
}
})
留存后页面开发工具左侧的编程,即可查阅至效果
备注: 布局可以使用图标字体,复制到 res/ 下,样式则写下在 app.wxss 全局样式表中,图标字体文件和样式恳请从源码中以获取,这篇教程不并作样式的表明
详尽页面
首页的布局已经顺利完成了,暂时卸下首页列表,接下来已经开始撰写详尽内容的页面
关上 pages/detail/detail.wxml ,嵌入内容如下
搞掂,这个页面就这么直观就OK了,现在我们关上 pages/detail/detail.js 手动嵌入数据至这个页面中查阅效果
Page({
data:{
hidden: true,
detail: {
title: "历史上的今天",
content: "历史上的今天历史上的今天历史上的今天历史上的今天历史上的今天历史上的今天历史上的今天历史上的今天历史上的今天",
picUrl: [
{
url: "http://sjbz.fd.zol-img.com.cn/t_s320x510c/g5/M00/00/04/ChMkJlfJWJCIYePaAAPdCld59MEAAU-KAP0U3gAA90i450.jpg",
pic_title: "这就是图片标题"
}
]
}
}
})
充填数据
现在页面布局都已经顺利完成了,就是时候调用API撰写逻辑层的代码去充填数据至页面上了,在已经开始之前我们先清扫一下无知的代码
关上 app.js 删除无知的函数和属性
App({
})
以上这步就是额外步骤,并不影响我们接下来必须搞的事情
关上 utils/util.js 并清空里面的代码,嵌入如下内容
// 查阅事件列表的Base URL
const API_URL_L = "http://v.juhe.cn/todayOnhistory/queryEvent.php"
// 查阅详细信息的Base URL
const API_URL_D = "http://v.juhe.cn/todayOnhistory/queryDetail.php"
// 提出申请API赢得的KEY
const API_KEY = "YOUR API KEY"
// 以获取事件列表
function fetchEvents(today) {
var promise = new Promise(function(resolve, reject){
wx.request({
url: API_URL_L,
data: {
key: API_KEY,
date: today
},
header: {
'Content-Type': 'application/json'
},
success: resolve,
fail: reject
})
})
return promise
}
function getEvents() {
var tmpDate = new Date()
var today = tmpDate.getMonth() + 1
today = today + '/' + tmpDate.getDate()
return fetchEvents(today)
.then(function(res) {
// console.log(res.data.result)
return res.data.result
})
.catch(function(err) {
console.log(err)
return []
})
}
// 以获取详细信息
function fetchDetail(e_id) {
var promise = new Promise(function(resolve, reject){
wx.request({
url: API_URL_D,
data: {
key: API_KEY,
e_id: e_id
},
header: {
'Content-Type': 'application/json'
},
success: resolve,
fail: reject
})
})
return promise
}
function getDetail(e_id) {
return fetchDetail(e_id)
.then(function(res) {
// console.log(res.data.result)
return res.data.result
})
.catch(function(err) {
console.log(err)
return []
})
}
module.exports = {
getEvents: getEvents,
getDetail: getDetail
}
备注: 恳请将 API_KEY 的值替代为你提出申请至的KEY
我们必须利用API以获取的数据存有两种,一就是「事件列表」,另一种就是事件对应的「详细信息」,上面采用至了 ES6 原生提供更多的 Promise 对象,具体内容恳请参照阮一峰的《JavaScript 标准参照教程(alpha)》中 「Promise对象」 一节
最后还使用了 module.exports 对外曝露两个函数,并使外部可以调用
我们稳步关上 pages/index/index.js 文件,修正成这样
const util = require('../../utils/util.js')
Page({
data: {
hidden: false,
events: []
},
onLoad:function(options){
// 页面初始化 options为页面重定向所增添的参数
var self = this
util.getEvents().then(function(data) {
self.setData({
hidden: true,
events: data
})
})
}
})
然后关上 pages/detail/detail.js ,修正如下
const util = require('../../utils/util.js')
Page({
data:{
hidden: false,
detail: {}
},
onLoad:function(param){
// 页面初始化 param为页面重定向所增添的参数
var self = this
util.getDetail(param.id).then(function(result){
self.setData({
detail: result[0]
})
})
},
onReady:function(){
// 页面图形顺利完成
wx.setNavigationBarTitle({
title: this.data.detail.title
})
this.setData({
hidden: true
})
}
})
这里我们调用了 wx.setNavigationBarTitle 方法动态设置导航系统栏的标题内容,须要特别注意的就是必须在页面图形顺利完成之后,即为 onReady 之后就可以调用该方法修正导航系统栏标题
这次教程就至这里完结啦~牵涉至的部分知识点并没详尽了解和表明,如果存有不明白的地方恳请大家根据我得出的链接回去查阅详尽的了解,此文权当快速初学者的一个引子,更加深入细致的内容以及小程序的其他API的采用,还须要各位亲自回去课堂教学,热烈欢迎交流~