小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。这是关于小程序生命周期和模板的引用之旅。
修改导航栏信息
先从修改导航栏信息开始,主要修改的文件是app.json
文件,在里面可以定义一些样式
定义底部tab导航栏
可以根据自己需求自定义底部导航栏的样式和icon,这些操作同样是在app.json
文件里操作。
app.json 是对当前小程序的全局配置,包括了小程序的所有页面路径、界面表现、网络超时时间、底部 tab 等。
简单说一下这个配置各个项的含义:
1、pages字段
—— 用于描述当前小程序所有页面路径,这是为了让微信客户端知道当前你的小程序页面定义在哪个目录。
2、window字段
—— 小程序所有页面的顶部背景颜色,文字颜色定义在这里的。
其他配置项细节可以参考文档 小程序的配置 app.json 。
以下是一个包含了所有配置选项的 app.json :
参考地址1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23{
"pages": [
"pages/index/index",
"pages/logs/index"
],
"window": {
"navigationBarTitleText": "Demo"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/logs/logs",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true
}
app.json 配置项列表
tabBar的配置参数可以在list
里面配置,包括icon的设置,可以去iconfont去下载,把下载好的icon图片放到images文件夹下,正确引用图片就好了。
iconPath与selectedIconPath就可以实现选中与没有选中效果。具体配置参考下图:
抽离公共部分
把头像和昵称抽离成公共部分共用,小程序提供了import
和include
两种方式,微信头像和昵称,显然是异步获取的。
为避免重复请求数据,可以利用缓存,在首页获取一次数据后,缓存到本地保存起来,在其他页面直接调取缓存的数据就可以了。为避免每个页面都写一遍样式,可以把展示头像和昵称相关的样式,统一写到app.wxss
全局样式表文件中。退出的时候,销毁本地存储,保证数据的准确性。
把index.wxss
里的用户样式移动到app.wxss
下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**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:
}
.usermotto {
margin-top: 200px;
}
接下来新建common
目录,新建文件header.wxml
1 | <!-- 在这个文件里把index页面的用户信息移动过来 --> |
在 index.wxml
合适位置引入文件:
1 | <include src="../common/header.wxml"/> |
在 index.js
合适位置缓存本地:
1 | // 缓存本地 |
在需要展示的页面就可以引入公共模块,和数据具体配置:
1 | <include src="../common/header.wxml"/> |
同时小程序还提供了template
模板组件,可以在模板里自定义代码片段,在不同的需要的地方调用。
接下来可以试着加入一个footer.wxml
公共组件文件吧。
footer.wxml:
需要引入的文件配置:
注意name 与 is 的对应关系,也可以自己定义出多个name模板适应不同的环境。
生命周期
app.js
文件,就是个App()
函数,App()函数的意思,其实就是注册一个小程序。看到index.js文件中,会有var app = getApp()
这样的代码出现,这是获取小程序实例的意思。其实这是配套的。只有先注册了小程序,后面才能获得小程序的实例。
再来看下App()的使用方法。就是接收了一个object参数而已。这个对象参数你可以把它拆出来,单独用个变量命名。
这个object,除了getUserInfo
这个自定义函数,还有onLaunch
是内置的函数,那么onLaunch是啥意思呢?
先来说下生命周期的概念。
生命周期,就是程序从创建到销毁的全过程。比如react的生命周期,大体分为:初始化,渲染前,渲染中,渲染后,销毁
等情景,这个主要是考虑web网页的特性划分的;而小程序本身并不是网页,它的生命周期,更像是app。
以安卓的Activity(可以理解为视图)为例,app的生命周期是下图示:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
正常一个app的生命周期还是十分繁琐的,有很多的使用场景都得考虑到。
小程序生命周期,分为注册App和注册Page两段。
其实也简单。App可以比作浏览器,Page可以比作网页。
那么App的生命周期呢,就是你双击浏览器打开的过程,也就是:创建、展示、隐藏,区区三个而已.
onShow和onHide,也就是前台和后台的定义。
当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台(onHide);当再次进入微信或再次打开小程序,又会从后台进入前台(onShow)。
当onShow的动作执行完毕后,紧接着就进入Page的生命周期了(onLoad)。
而对于onError和其他选项,一般不经常使用。
Page(网页)的生命周期。Page() 函数用来注册一个页面。接受一个 object 参数,其指定页面的初始数据、生命周期函数、事件处理函数等。
这里也有onShow
和onHide
,那么这俩哥们又是啥时候触发呢?
onShow是页面加载(onLoad)后马上触发的,也就展示页面的意思。但是,展示并不代表渲染完成,所以还有个监听渲染是否完成(onReady)的过程;当跳到另外一个页面后,就触发了onHide隐藏页面,最后当页面关闭时,就触发了onUnload事件。
啥叫页面关闭呢?小程序不是网页啊,也没关闭按钮,怎么关闭呢?
页面跳转分两种情况:
1、wx.navigateTo保留当前页面,跳转
2、wx.redirectTo关闭当前页面,跳转
这二者的区别就是是否能够返回上一个页面。如果是关闭了当前页面跳转,就无法返回了。
1 | <button open-type="getUserInfo" bindtap="keepJump">保留当前页面并跳转 </button> |