UniApp 应用、页面与组件的生命周期详解
在uni-app
中包含了 应用生命周期、页面生命周期、和组件生命周期( Vue.js
的)函数。
应用生命周期
应用生命周期仅可在App.vue
中监听,在其它页面监听无效。
<script>export default {onLaunch: function() {console.log('onLaunch:应用初始化完成,全局触发一次');},onShow: function() {console.log('onShow:应用从后台进入前台,多次');},onHide: function() {console.log('onHide:应用从前台进入后台,多次');},onError:function(err){console.log('onError:监听页面异常', err);}}
</script>
应用从前台进入后台
报错监听:
<button type="button" @click="clickHandler">点击报错</button>clickHandler(){const i = 1;i = 10;}
效果,常量不能改变值,会报错,相应的会监听到:
页面生命周期
uniapp
在pages.json
中配置的页面才有一下页面生命周期函数,子组件中没有这些函数
onLoad
:监听页面加载,其参数为上个页面传递的数据,参数类型为Object
用于页面传参。onShow
:监听页面显示,页面每次出现在屏幕上都会触发,包括从下级页面返回露出当前页面。onReady
:监听页面初次渲染完成,注意,如果渲染速度加快,会在页面进入动画前完成出发。onHide
:监听页面隐藏。
-onUnload
:页面卸载函数,当前页面从内存中关闭显示。
-onResize
:当窗口屏幕变化,横屏竖屏的时候。
onLoad() {console.log("监听页面加载,一般用于初始化页面数据,进入页面时调用一次")
},
onShow() {console.log("监听页面显示,页面出现在屏幕上就会被触发")
},
onReady() {console.log("监听页面出事渲染完成")
},
onHide() {console.log("页面隐藏")
},
效果:
通过uni.reLaunch()
进行跳转,并且关闭内存中的所有页面
onUnload(){console.log("页面卸载")
},
窗口横屏监听函数:
onResize() {console.log("窗口已变化")
},
组件生命周期
uniapp
组件支持的生命周期,与vue
标准生命周期相同,这里没有页面级的onLoad
等生命周期,一般在子组件使用,当然页面中也可以使用的。
beforeCreate
:在实例初始化之后被调用。created
:在实例创建完成后被立即调用。beforeMount
:在挂在开始之前被调用。mounted
:挂在到实例上去之后调用,并不能确定子组件被全部挂在,如果需要子组件完全挂载之后在执行操作可以使用$nextTick
。beforeUpdate
:数据更新时调用,发生在虚拟DOM
不定之前。updated
由于数据更改导致虚拟DOM
重新渲染和打补丁,在这时候会调用该钩子。beforeDestroy
:实例销毁之前调用,到了这个生命周期时候,实例完全可以使用。destroyed
:vue
实例销毁后调用,调用后,vue
实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
总结:
只要是 vue
或.nvue
就可以使用组件生命周期函数,但是页面生命周期函数只能在pages
选项中注册了作为页面时才可以使用。应用生命周期函数只能在App.vue
文件中使用。