uniapp相关常用知识点

196 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天

uniapp生命周期

(1)应用生命周期

函数名说明
onLaunchuni-app 初始化完成时触发(全局只触发一次)
onShowuni-app 启动,或从后台进入前台显示
onHideuni-app 从前台进入后台
onErroruni-app 报错时触发
onUniNViewMessagenvue 页面发送的数据进行监听,可参考 nvue 向 vue 通讯
onUnhandledRejection对未处理的 Promise 拒绝事件监听函数(2.8.1+)
onPageNotFound页面不存在监听函数
onThemeChange监听系统主题变化

(2)页面生命周期

函数名说明
onLoad监听页面加载,其参数为上个页面传递的数据,参数类型为Object(用于页面传参),参考示例
onShow监听页面显示。页面每次出现在屏幕上都触发,包括从下级页面点返回露出当前页面
onReady监听页面初次渲染完成。注意如果渲染速度快,会在页面进入动画完成前触发
onHide监听页面隐藏
onUnload监听页面卸载
onResize监听窗口尺寸变化
onPullDownRefresh监听用户下拉动作,一般用于下拉刷新,参考示例
onReachBottom页面滚动到底部的事件(不是scroll-view滚到底),常用于下拉下一页数据。具体见下方注意事项
onTabItemTap点击 tab 时触发,参数为Object,具体见下方注意事项
onShareAppMessage用户点击右上角分享
onPageScroll监听页面滚动,参数为Object
onNavigationBarButtonTap监听原生标题栏按钮点击事件,参数为Object
onBackPress监听页面返回
onNavigationBarSearchInputChanged监听原生标题栏搜索输入框输入内容变化事件
onNavigationBarSearchInputConfirmed监听原生标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。
onNavigationBarSearchInputClicked监听原生标题栏搜索输入框点击事件
onShareTimeline监听用户点击右上角转发到朋友圈
onAddToFavorites监听用户点击右上角收藏

UniAPP 路由配置及页面跳转

(1)路由配置

uni-app 页面路由全部交给框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式(类似小程序在 app.json 中配置页面路由)。

 "pages": [
         {
             "path": "pages/index",
             "style": {
                 "navigationBarTitleText": "路由配置",
                 "navigationBarBackgroundColor": "#FFFFFF",
                 "navigationBarTextStyle": "black",
                 "backgroundColor": "#FFFFFF",
                 "enablePullDownRefresh": true
             }
         },
         {
             "path": "pages/user",
             "style": {
                 "navigationBarTitleText": "路由配置",
                 "navigationBarBackgroundColor": "#FFFFFF",
                 "navigationBarTextStyle": "black",
                 "backgroundColor": "#FFFFFF",
                 "enablePullDownRefresh": true
             }
         }
 ]

(2)路由跳转

uni-app 有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳转(编程式导航)

框架以栈的形式管理当前所有页面, 当发生路由切换的时候,页面栈的表现如下:

路由方式页面栈表现触发时机
初始化新页面入栈uni-app 打开的第一个页面
打开新页面新页面入栈调用 API uni.navigateTo、 使用组件 <navigator open-type="navigate" />
页面重定向当前页面出栈,新页面入栈调用 API uni.redirectTo 、 使用组件
页面返回页面不断出栈,直到目标返回页调用 API uni.navigateBack 、 使用组件 、 用户按左上角返回按钮、安卓用户点击物理back按键
Tab 切换页面全部出栈,只留下新的 Tab 页面调用 API uni.switchTab 、 使用组件 、 用户切换 Tab
重加载页面全部出栈,只留下新的页面调用 API uni.reLaunch 、 使用组件

获取当前页面栈

getCurrentPages() 函数用于获取当前页面栈的实例,以数组形式按栈的顺序给出,第一个元素为首页,最后一个元素为当前页面。

注意: getCurrentPages() 仅用于展示页面栈的情况,请勿修改页面栈,以免造成页面状态错误。

路由传参与接收

说明:页面生命周期的 onLoad()监听页面加载,其参数为上个页面传递的数据,如:

//页面跳转并传递参数
uni.navigateTo({
    url: 'page2?name=li&message=Hello'
});
// 页面 2 接收参数
onLoad: function (option) { //option为object类型,会序列化上个页面传递的参数
	console.log(option.name); //打印出上个页面传递的参数。
	console.log(option.message); //打印出上个页面传递的参数。
}

注意:url 有长度限制,太长的字符串会传递失败,并且不规范的字符格式也可能导致传递失败,所以对于复杂参数建议使用 encodeURI、decodeURI 进行处理后传递

开发环境和生产环境

uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境,一般用于连接测试服务器或生产服务器的动态切换。

在HBuilderX 中,点击「运行」编译出来的代码是开发环境,点击「发行」编译出来的代码是生产环境

if(process.env.NODE_ENV === 'development'){
    console.log('开发环境')
}else{
    console.log('生产环境')
}

判断平台

平台判断有2种场景,一种是在编译期判断,一种是在运行期判断。

编译期判断编译期判断,即条件编译,不同平台在编译出包后已经是不同的代码,

 // #ifdef H5
 alert("只有h5平台才有alert方法")
 // #endif
 // 如上代码只会编译到H5的发行包里,其他平台的包不会包含如上代码。

运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.getSystemInfoSync().platform 判断客户端环境是 Android、iOS 还是小程序开发工具

 switch(uni.getSystemInfoSync().platform){
 case 'android':
    console.log('运行Android上')
    break;
 case 'ios':
    console.log('运行iOS上')
    break;
 default:
    console.log('运行在开发者工具上')
    break;
 }