小程序学习(一)
通过本节的学习对小程序有个大概的认识和了解,具体见本节知识点。
本节知识点
- 初步了解小程序
- 下载开发工具
- 获取APPID
- 了解对应文件的作用
小程序的概述
微信小程序是运行在微信环境中的应用,它只能在微信中运行。不能运行在浏览器中,微信小程序提供了专门的开发工具。用于微信小程序的开发,还提供了丰富的API,让我们的小程序能够具备与手机设计和微信交互的能力。比如获取摄像头拍照,访问文件系统等等。那么与微信交互主要体现在三个方面
- 获取登录微信用户的用户信息
- 微信支付
- 使用模板消息向微信发送通知消息
第一步 获取开发小程序的APPID
- 点击注册选择小程序即可。这里需要用户手拿身份证注册拍照,获取认证。具体步骤请见百度
- 点击 登陆就可在网站的”设置” - “开发者设置”中,查看到微信小程序的AppId,注意不可直接使用服务号或者订阅号的APPID

注意:如果要以非管理员微信号上在手机上体验该小程序,那么必须还需要操作”绑定开发者”,即在用户身份,“开发者”模块,绑定需要体验该小程序的微信号。本教程默认注册账号,体验都是使用管理员微信号
第二步 下载小程序的开发工具
- 为了更简单,更方便的开发小程序只有使用微信自带的开发者工具了,WeStrom,SublimeText,等等都不支持. 点击下载此工具
- 安装不用多说了。直接下一步就好了。安装好以后每次登陆的时候必须要联网,必须要扫码。单机无法操作 具体使用步骤请看第二节开发工具的使用
第三步 创建第一个项目
- 当用微信扫码登陆,选择创建”项目”,填入刚才获取的APPID,设置一个本地项目的名称(非小程序名称),比如”我的第一个项目”,并选择一个本地的文件夹作为代码的存储的目录,点击”新建项目”就可以了.
- 在创建过程中,如果选择的本地文件夹是个空文件夹,开发者工具会提示:是否需要创建一个quick start目录,在这个项目上选择勾,开发者工具会自动在开发目录里生成一个简单的demo

第四步 简要说说个个文件的作用。后续会说明的。

小程序项目在根目录必不可少的3个文件:
- app.js
- app.json
- app.wxss
app.js
app.js是小程序的脚本代码,我们可以在文件中监听并处理小程序的生命周期函数,声明全局变量,调用框架提供的丰富的API,具体的后续请参照小程序API文档。
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
// 获取用户信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
wx.getUserInfo({
success: res => {
// 可以将 res 发送给后台解码出 unionId
this.globalData.userInfo = res.userInfo
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
if (this.userInfoReadyCallback) {
this.userInfoReadyCallback(res)
}
}
})
}
}
})
},
globalData: {
userInfo: null
}
})
app.json
app.json是对整个小程序的全局配置。我们可以在这个文件中配置小程序是由哪些页面组成,配置小程序的窗口背景色,配置导航条样式,配置默认标题。(JSON包)
重要的事情说三遍。这里特别注意不可以加任何注释! 不能加任何注释! 不能加任何注释!
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
app.wxss
app.wxss是整个小程序的公共样式表。我们可以在页面组件的class属性上直接使用app.wxss样式规则
(类似里面的CSS文件)
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}
上面3个是通配每见一个小程序都必须要有的。下面说的是单独怎么建页面
自创页面
自创的页面都只能在pages目录下面。微信小程序的每一个页面的[路径+页面名]都需要写在app.json的pages中,且pages中的第一个页面是小程序的首页.
每一个小程序是由同路径下同名的四个不同后缀文件的组成:如index.js,index.wxml,index.wxss,index.json
.js后缀的文件是脚本文件。
.json后缀的文件是配置文件
.wxss后缀是样式表文件
.wxml后缀的文件就是页面结构文件.
index.wxml是页面的结构文件
<!--index.wxml-->
<view class="container">
<view class="userinfo">
<block wx:if="{{hasUserInfo}}">
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
<button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
本例中使用了
index.js是页面的脚本文件,在这个文件中我们可以监听并处理页面的生命周期函数,获取小程序实例,声明并处理数据,响应页面交互事件等。
//index.js
//获取应用实例
const app = getApp()
Page({
data: {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false
},
//事件处理函数
bindViewTap: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
}
},
getUserInfo: function(e) {
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
}
})
index.wxss是页面的样式表:
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname {
color: #aaa;
}
.usermotto {
margin-top: 200px;
}
页面的样式表是非必要的,当有页面样式表时,页面的样式表中的样式规则会层叠覆盖app.wxss中的样式规则,如果不指定页面的样式表,也可以在页面的结构文件中直接使用app.wxss中指定的样式规则
index.json是页面的配置文件
页面的配置文件是非必要的。当有页面的配置文件时,配置项在该页面会覆盖app.json的window中相同的配置项。如果没有指定的页面配置文件,则在该页面直接使用app.json中的默认配置。
logs的页面结构
<!--logs.wxml-->
<view class="container log-list">
<block wx:for="{{logs}}" wx:for-item="log">
<text class="log-item">{{index + 1}}. {{log}}</text>
</block>
</view>
logs页面使用
//logs.js
const util = require('../../utils/util.js')
Page({
data: {
logs: []
},
onLoad: function () {
this.setData({
logs: (wx.getStorageSync('logs') || []).map(log => {
return util.formatTime(new Date(log))
})
})
}
})
运行结果如下:
手机预览
开发者工具左侧菜单栏选择”项目”点击预览,扫码后即可在微信客户端中体验。