应用生命周期
函数名 说明 onLaunch 当 uni-app
初始化完成时触发(全局只触发一次)onShow 当 uni-app
启动,或从后台进入前台显示onHide 当 uni-app
从前台进入后台onError 当 uni-app
报错时触发onUniNViewMessage 对 nvue
页面发送的数据进行监听,可参考 nvue 向 vue 通讯注意
- 应用生命周期仅可在
App.vue
中监听,在其它页面监听无效。
页面生命周期
大可能性会用到的onLoad、onShow、 onReady、 onHide、 onPullDownRefresh、 onReachBottom、
onTabltemTap、onShareAppMessage、 onPageScroll
函数名 说明 平台差异说明 最低版本 onLoad 监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例 onShow 监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面 onReady 监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发 onHide 监听页面隐藏 onUnload 监听页面卸载 onResize 监听窗口尺寸变化 App、微信小程序 onPullDownRefresh 监听用户下拉动作,一般用于下拉刷新,参考示例 onReachBottom 页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项 onTabItemTap 点击 tab 时触发,参数为Object,具体见下方注意事项 微信小程序、支付宝小程序、百度小程序、H5、App(自定义组件模式) onShareAppMessage 用户点击右上角分享 微信小程序、百度小程序、字节跳动小程序、支付宝小程序 onPageScroll 监听页面滚动,参数为Object nvue暂不支持
注意点 —— onLaunch只能在App.vue里写
组件生命周期
uni-app
组件支持的生命周期,与vue标准组件的生命周期相同。
这里没有页面级的onLoad等生命周期。
路由
注意点:初学可能会遇到的问题,新建一个页面, 访问不到,因为没有配对pages.json文件, 需要用到的页面一定要在pages.json里配, 第一个配置项就是启动页。pages.json能加tabbar,如果不需要他的tabbar,就需要自己自定义一个tabbar组件。
pages.json所有配置选项:
pages为路由
condition为启动模式配置仅开发期间生效,用于模拟直达页面的场景,如:小程序转发后,用户点击所打开的页面;
globalStyle用于设置应用的状态栏、导航条、标题、窗口背景色等
tabBar: tabBar 配置项指定 tab 栏的表现
easycom传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom
将其精简为一步。 只要组件安装在项目的components目录下,并符合components/组件名称/组件名称.vue
目录结构。就可以不用引用、注册,直接在页面中使用
{
"pages": [{
"path": "pages/component/index",
"style": {
"navigationBarTitleText": "组件"
}
}, {
"path": "pages/API/index",
"style": {
"navigationBarTitleText": "接口"
}
}, {
"path": "pages/component/view/index",
"style": {
"navigationBarTitleText": "view"
}
}],
"condition": { //模式配置,仅开发期间生效
"current": 0, //当前激活的模式(list 的索引项)
"list": [{
"name": "test", //模式名称
"path": "pages/component/view/index" //启动页面,必选
}]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "演示",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8",
"usingComponents":{
"collapse-tree-item":"/components/collapse-tree-item"
},
"renderingMode": "seperated", // 仅微信小程序,webrtc 无法正常时尝试强制关闭同层渲染
"pageOrientation": "portrait"//横屏配置,全局屏幕旋转设置(仅 APP/微信/QQ小程序),支持 auto / portrait / landscape
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"height": "50px",
"fontSize": "10px",
"iconWidth": "24px",
"spacing": "3px",
"list": [{
"pagePath": "pages/component/index",
"iconPath": "static/image/icon_component.png",
"selectedIconPath": "static/image/icon_component_HL.png",
"text": "组件"
}, {
"pagePath": "pages/API/index",
"iconPath": "static/image/icon_API.png",
"selectedIconPath": "static/image/icon_API_HL.png",
"text": "接口"
}],
"midButton": {
"width": "80px",
"height": "50px",
"text": "文字",
"iconPath": "static/image/midButton_iconPath.png",
"iconWidth": "24px",
"backgroundImage": "static/image/midButton_backgroundImage.png"
}
},
"easycom": {
"autoscan": true, //是否自动扫描组件
"custom": {//自定义扫描规则
"uni-(.*)": "@/components/uni-$1.vue"
}
}
}
路由跳转
保留当前页面,跳转到应用内的某个页面,使用
uni.navigateBack
可以返回到原页面。//在起始页面跳转到test.vue页面并传递参数 uni.navigateTo({ url: 'test?id=1&name=uniapp' });
// 在test.vue页面接受参数 export default { onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数 console.log(option.id); //打印出上个页面传递的参数。 console.log(option.name); //打印出上个页面传递的参数。 } }
关闭当前页面,跳转到应用内的某个页面。
uni.redirectTo({ url: 'test?id=1' });
关闭所有页面,打开到应用内的某个页面。
uni.reLaunch({ url: 'test?id=1' }); export default { onLoad: function (option) { console.log(option.id); } }
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
pages.json:
{ "tabBar": { "list": [{ "pagePath": "pages/index/index", "text": "首页" },{ "pagePath": "pages/other/other", "text": "其他" }] } }
other.vue
uni.switchTab({ url: '/pages/index/index' });
关闭当前页面,返回上一页面或多级页面。可通过
getCurrentPages()
获取当前的页面栈,决定需要返回几层。// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,而 redirectTo 方法则不会。见下方示例代码 // 此处是A页面 uni.navigateTo({ url: 'B?id=1' }); // 此处是B页面 uni.navigateTo({ url: 'C?id=1' }); // 在C页面内 navigateBack,将返回A页面 uni.navigateBack({ delta: 2 });
运行环境判断:
这个和vue差不多的, 可以用来区分环境,你本地运行会用开发环境,打包会自动用生产环境
页面样式与布局
uni-app内有个自己提供的动态单位upx,宽度定死750个upx,这样就可以用类似百分比的方式设置宽高了; vh是视窗高度百分比
动态修改upx需要使用uni.upx2px函数,否则无法生效
Flex布局是真的好用,学会了这个感觉至少静态布局上都没什么难度了,uni-app也推荐使用这种布局
推荐学习flex网址:https://blog.csdn.net/Allenyhy/article/details/81605547
支持npm安装第三方包
小程序组件支持——有一定规范,需要自定义写对应组件的要看看这个