微信小程序常用Api
本文学习微信小程序的常用API,内容整体分为配置、逻辑、样式、结构4个部分,也可以分为全局和页面级别
目录结构
小程序项目可以分为两个级别:全局和页面级别,全局可以配置小程序整体信息,页面级别主要由配置、逻辑、样式、结构4个部分组成,详细:官方文档
全局配置文件
使用全局配置制作菜单栏
app.json
"tabBar": { "list": [{ "pagePath": "pages/index/index", "text": "首页" }, { "pagePath": "pages/logs/logs", "text": "日志" }] },详细的全局配置文件:官方文档,总体的配置也很简单,文档可以这样看,配置项就是整体可以配置的内容,可以配置什么功能,常用的有entryPagePath、pages、window、tabBar和networkTimeout,下面的就是对配置项的详细描述
页面级别配置文件
每一个小程序页面也可以使用同名 .json 文件来对本页面的窗口表现进行配置,页面中配置项会覆盖 app.json 的 window 中相同的配置项。
{ "navigationBarBackgroundColor": "#ffffff", "navigationBarTextStyle": "black", "navigationBarTitleText": "微信接口功能演示", "backgroundColor": "#eeeeee", "backgroundTextStyle": "light"}完整配置项说明请参考 小程序页面配置 。
全局逻辑中的生命周期函数
关于全局逻辑中的生命周期函数可以参考文档,除了生命周期函数的说明外,文档也列举了一些推荐和不推荐写法,如现在并不推荐使用 App() 中的参数,而是使用对应的 wx 调用来代替。 文档地址
onLaunch:小程序启动的时候自动执行,带一个参数;小程序初始化完成时触发,全局只触发一次。这里需要注意,如果短时间内多次打开是执行一次,如果长时间再打开,这时候onLaunch就会重新执行一次
App({ onLaunch(options){ console.log('onLaunch',options); }})参数值可以参考:官方文档,也可以使用 wx.getLaunchOptionsSync 获取
onShow:小程序启动,或从后台进入前台显示时触发。一样也会带一个参数,onShow只要是退出重新进入小程序都会执行的一个函数,无论时间间隔的长短,这是与onLaunch区别,注意:onShow是onLaunch后的一个函数,也就是onLaunch是先执行,后才执行onShow
onShow(options){ console.log('onShow',options); },参数值可以参考:官方文档,也可以使用 wx.onAppShow 获取
onHide:小程序从前台进入后台时触发。一样也有一个参数,这个参数可以了解用户退出后的去向,可以和onShow配对理解。一个显示一个退出
onHide(options){ console.log('onHide',options); }onError:小程序发生脚本错误或 API 调用报错时触发。
// 不推荐的写法App({ onLaunch(options) { // 在启动时执行 }, onError(msg) { // 发生脚本错误时执行 console.log(msg) },})// 推荐的写法App()
wx.onError(function () { // 发生脚本错误时执行 console.log(msg)})
// 在启动时执行var options = wx.getLaunchOptionsSync()推荐写法中,原来放在 onLaunch() 里的初始化代码,可以直接放在 app.js 顶层执行,也可以封装成初始化函数后主动调用。
App();
// 监听全局错误wx.onError((msg) => { console.log('全局错误:', msg);});// 获取启动参数const options = wx.getLaunchOptionsSync();// 初始化用户信息function initUser() { console.log('初始化用户信息');}// 封装启动逻辑function initApp() { console.log('小程序启动了'); const token = wx.getStorageSync('token'); initUser(); console.log('启动参数', options);}
// 主动执行初始化initApp();全局方法及数据的定义及调用方式
全局的方法,怎么在页面级别的js中调用呢,小程序提供了一个getApp的接口,需要注意的是,这里的sayHello需要写在App内,也就是不能用推荐写法,当然现在这种写法也不推荐了,可以通过模块化来实现同样功能,文档地址
App({ sayHello(){ console.log('hello word'); }});const app = getApp()Page({onLoad(){ app.sayHello()}})页面级别的生命周期函数
在页面运行的某个时刻执行的函数,其实页面级别的生命周期函数和全局的差不多,只不过语义上有差别,页面级别有6个生命周期函数,具体可以参考文档:官方文档
onLoad:页面加载时触发。一个页面只会调用一次,可以在 onLoad 的参数中获取打开当前页面路径中的参数。
onShow:页面显示/切入前台时触发。
onReady:页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互
onHide:页面隐藏/切入后台时触发。 如 wx.navigateTo 或底部 tab 切换到其他页面,小程序切入后台等。
onUnload:页面卸载时触发。如wx.redirectTo或wx.navigateBack到其他页面时
onRouteDone:路由动画完成时触发。如 wx.navigateTo 页面完全推入后 或 wx.navigateBack 页面完全恢复时。
除了上面6个外,还有很多其他在特定操作下自动触发的函数,如下拉刷新、用户点击右上角转发,用户点击右上角转发到朋友圈等等
页面逻辑层数据的定义及与页面的串联
事件的文档:官方文档
数据绑定:
Page({ data:{ num:'1' },})<view>{{num}}</view>点击事件:
changename(){ console.log('changename'); }<view class="container" bind:tap="changename">{{num}}</view>点击改变数据
Page({ data:{ num:'1' }, changename(){ console.log('changename'); this.setData({ num:'2' }) }})<view class="container" bind:tap="changename">{{num}}</view>逻辑层中的 API
官方API文档:文档 api调用一般都是通过wx.调用的
wx.showModal({ title: '提示', content: '这是一个模态弹窗',})wx.request({ url:'https://www.fastmock.site/mock/fdf9557ad5613aec6428d08d90f25b45/weixin/api/getDate', success(res){ console.log(res); }})视图层的数据绑定
视图层包括WXML和WXSS,可以理解为HTML5和CSS3,只不过一些属性可能不支持;
在小程序没有DOM的概念,有组件的概念,view是最小的组件,可以理解为div
实现判断,点击显示隐藏功能:
<view class="flex"> <button bind:tap="changename">{{msg}}</button> <view wx:if="{{!show}}">hello</view> <view hidden="{{show}}">hidden</view> <checkbox checked="{{true}}">选择框</checkbox></view>Page({ data:{ msg:'点击显示', show:true }, changename(){ if(!this.data.show){ this.setData({ msg:'点击显示', show:true }) return } this.setData({ msg:'点击隐藏', show:false }) }}).flex{ display: flex; flex-direction: column; justify-content: center; align-items: center;}wx
视图层循环展示内容
循环语句
<view class="flex"> <view wx:for="{{list}}"> {{item.title}} {{item.dec}} </view>
</view>Page({ data:{
list:[ { title:'我是标题1', dec:'描述1' }, { title:'我是标题2', dec:'描述2' }, { title:'我是标题3', dec:'描述3' } ] },})视图层代码的拆分
这里是页面嵌入:include 不推荐
<view class="flex"> <view>header</view><include src="./content.wxml" /><view>footer</view></view><view>content1</view><view>{{content}}</view>include其实就把页面嵌入到另外页面中,这里{{content}}也是可以正常使用index.js定义的数据的
引入其他文件中的子模板:<template> 和 <import> 推荐
<view class="flex"> <view>header</view><import src="./content.wxml"/><template is="content" data="{{ content }}"/><view>footer</view></view><template name="content"> <view>content1</view><view>{{content}}</view></template>组件&样式
页面是由一个一个组件组成的,对于一些样式基本相同的组件,就可以封装成一个组件,供其他页面使用文档地址:自定义组件
样式尺寸单位:
- 布局:使用
%、rpx、vw等相对单位,实现自适应。 - 字体:优先使用
px,保证字体大小稳定。 - 媒体查询:针对平板、PC 等大屏幕,适当调整字体大小和布局。
- Flex / Grid:配合相对单位,实现更加灵活的响应式布局。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














