中经常会有这样的场景,我们自定义的组件需要在页面生命周期时做一些事情,像 这种组件时就很方便,但是微信小程序这种就分页面生命周期和组件生命周期,并不是那么方便了,所以需要了解一下。
1、最重要的生命周期是
组件实例刚刚被创建好时, 生命周期被触发。此时,组件数据 就是在 构造器中定义的数据 。 此时还不能调用 。 通常情况下,这个生命周期只应该用于给组件 添加一些自定义属性字段。
在组件完全初始化完毕、进入页面节点树后, 生命周期被触发。此时, 已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行。
在组件离开页面节点树后, 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则 会被触发。
2、定义组件生命周期的方法
组件的生命周期可以在 字段内进行(这是推荐的方式,其优先级最高)
3、组件所在页面的生命周期
还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 定义段中定义。其中可用的生命周期包括:
如上节所述,小程序在自定义的组件里能够通过设置 监听父页面的生命周期函数,那么在-中应该怎么做?
- 小程序的话,直接 、、 就可以。分别对应小程序组件里 的 、、。
但是我在加了 后发现却怎么也触发不了,然后在页面加了 发现也触发不了,为什么?继续往下看。
后来了解到说:微信小程序,隐藏当前页面时(跳转,销毁,隐藏)并不触发事件,而是 触发事件。
因为小程序中,并不隐藏页面,而是直接销毁了,因此 触发事件 。因此业务逻辑应该写在 中。
也就是说:页面销毁后就没有 了,请使用 。
我个人觉得以上说法肯定也不对。如果页面都是销毁的话,那返回的时候岂不是都得重新渲染,而不是缓存,显然不是这样的。那么我就用项目中的试一试。
1、如下面这样 之间导航页切换时,触发的是 ,未触发
2、但是当 导航页不变,如只是点击 “特色服务” 里的子页面时,触发的是:先触发的组件的 ,再触发页面的 ,不会触发“特色服务”页面的
3、从子页面,再返回“特色服务”页面,触发的是:先触发的组件的 ,再触发的页面的
因为这个是项目里封装了的, 点击之间是用的 ,所以相当于是之前的页面销毁,所以总结一下就是:
(1)页面有销毁,就是触发的
(2)页面没销毁,就是触发的
(3)页面都销毁了,组件自然也销毁了,所以只有页面 的时候,组件才可能触发 事件。