本文为您带来了uniapp声明周期的相关知识,主要介绍了应用声明周期、页面生命周期和组件生命周期的相关问题,希望对您有所帮助。
推荐:uniapp教程
应用生命周期
uni-app
支持以下应用生命周期函数:
函数名 | 说明 |
---|---|
onLaunch | 当uni-app 初始化完成时触发(全局只触发一次) |
onShow | 当 uni-app 启动,或从后台进入前台显示 |
onHide | 当 uni-app 从前台进入后台 |
onError | 当 uni-app 报错时触发 |
onUniNViewMessage | 对 nvue 监控页面发送的数据,可参考页面发送的数据 nvue 向 vue 通讯 |
onUnhandledRejection | 对未处理的 Promise 事件监听函数(2.8).1 ) |
onPageNotFound | 页面上没有监听函数 |
onThemeChange | 监控系统主题发生变化 |
注意
- 应用生命周期只能存在
App.vue
中间监控,在其他页面监控无效。 - 在onlaunch中跳转页面,如果白屏报错,请参考onlaunch生命周期中的navigateto跳转页面 - DCloud问答
- onPageNotFound 页面实际上已经打开了(例如,通过分享卡片、小程序码),并且发现页面不存在,才会触发,api 不存在跳转的页面不会被触发(如跳转不存在的页面) uni.navigateTo)
页面生命周期
uni-app
支持以下页面生命周期函数:
函数名 | 说明 | 说明平台差异 | 最低版本 |
---|---|---|---|
onInit | 监控页面初始化,其参数与参数相同 onLoad 参数,为上一页传输的数据,参数类型为 Object(用于页面传参),触发时间早于 onLoad | 百度小程序 | 3.1.0 |
onLoad | 监控页面加载,其参数为上一页传输的数据,参数类型为 Object(用于页面传参),参考示例 | ||
onShow | 监控页面显示。每次页面出现在屏幕上,都会触发,包括从下级页面点返回,露出当前页面 | ||
onReady | 第一次完成监控页面渲染。注意,如果渲染速度快,会在页面进入动画完成前触发 | ||
onHide | 隐藏监控页面 | ||
onUnload | 卸载监控页面 | ||
onResize | 监控窗口尺寸变化 | App、微信小程序 | |
onPullDownRefresh | 监控用户下拉动作,一般用于下拉刷新,参考示例 | ||
onReachBottom | 页面滚到底部的事件(不是scroll-view滚到底),常用于下拉下一页的数据。详见以下注意事项 | ||
onTabItemTap | 点击 tab 触发时,参数为Object,详见下方注意事项 | 微信小程序,QQ小程序,支付宝小程序,百度小程序,H5、App | |
onShareAppMessage | 用户点击右上角分享 | 微信小程序、QQ小程序、支付宝小程序、字节小程序、飞书小程序、快手小程序 | |
onPageScroll | 监听页面滚动,参数为Object | nvue暂时不支持 | |
onNavigationBarButtonTap | 监控原始标题栏按钮点击事件,参数为Object | App、H5 | |
onBackPress | 返回监控页面,返回 event = {from:backbutton、 navigateBack} ,backbutton 表示来源为左上角返回按钮或左上角返回按钮 android 返回键;navigateBack表示来源是 uni.navigateBack ;详细说明及使用:onBackPress 详解。只有真机才能触发支付宝小程序,只能监控非navigateBack引起的返回,不能阻止默认行为。 | app、H5、支付宝小程序 | |
onNavigationBarSearchInputChanged | 监听原生标题栏搜索输入框输入内容变化事件 | App、H5 | 1.6.0 |
onNavigationBarSearchInputConfirmed | 监控原始标题栏搜索输入框搜索事件,用户点击软键盘上的“搜索”按钮时触发。 | App、H5 | 1.6.0 |
onNavigationBarSearchInputClicked | 监听原生标题栏搜索输入框点击事件(pages.json 中的 searchInput 配置 disabled 为 true 时间会触发) | App、H5 | 1.6.0 |
onShareTimeline | 监听用户点击右上角转发到朋友圈 | 微信小程序 | 2.8.1 |
onAddToFavorites | 监听用户点击右上角收藏 | 微信小程序 | 2.8.1 |
onInit
使用注意
- 只有百度小程序基础库 3.260 以上支持 onInit 生命周期
- 其他版本或平台可以同时使用 onLoad 兼容生命周期,注意避免重复执行相同的逻辑
- 不依赖页面传参的逻辑可以直接使用 created 替代生命周期
onReachBottom
使用注意 可以在pages中.json中定义了具体页面底部的触发距离onreachBottomdistance,例如设置为50,然后将页面滚动到距离底部50px时,就会触发onreachBottom事件。
如果使用scroll-view导致页面不滚动,则触底事件不会被触发。scroll-请参考scroll-view文档,将view滚到底部的事件
onPageScroll
(监听滚动、滚动、滚动事件)参数说明:
属性 | 类型 | 说明 |
---|---|---|
scrollTop | Number | 页面在垂直方向滚动的距离(单位px) |
注意
onPageScroll
不要写复杂的js,比如频繁修改页面。因为这个生命周期是由渲染层触发的,js是在非h5端的逻辑层执行的,两层之间的通信是有损失的。如果在滚动过程中频繁触发两层之间的数据交换,可能会造成卡住。- 如果您想在滚动时实现标题栏的透明渐变,在App和H5下,可以在pagess上.在json中配置titlenview下的type为transparent,参考。
- 如果需要滚动吸顶固定某些元素,建议使用css的粘性布局,参考插件市场。插件市场上还有其他js实现的吸顶插件,但性能不好,需要时可以自己搜索。
- 在App、在微信小程序、H5中,也可以使用wxs监控滚动,参考;在app-nvue中,可以使用bindingx监控滚动,参考。
onBackPress
上不可使用async
,会导致无法阻止默认返回
onPageScroll : function(e) { //nvue暂时不支持滚动监控,可以用bindingx代替
console.log(