小程序自定义组件——组件生命周期和组件间关系代码

 组件生命周期

组件的生命周期指的是组件自身的一些函数,这些函数在特殊的时间点或遇到一些特殊的框架事件时被自动触发。

其中,最重要的生命周期是 createdattached 和 detached,包含一个组件实例生命流程的最主要时间点。

  • 组件实例刚刚被创建时, created 生命周期被触发。此时,组件数据 this.data 就是在 Component 构造器中定义的数据 data。 此时还不能调用 setData。通常情况下,这个生命周期只应该用于给组件 this 添加一些自定义属性字段。
  • 在组件完全初始化完毕、进入页面节点树后,attached 生命周期被触发。此时,this.data 已被初始化为组件的当前值。这个生命周期很有用,绝大多数初始化工作可以在这个时机进行。
  • 在组件离开页面节点树后,detached 生命周期被触发。退出一个页面时,如果组件还在页面节点树中,则 detached 会被触发。

 

定义生命周期方法

生命周期方法需要定义在 Component 构造器的 lifetimes 字段内进行声明。

示例代码:

Component({
  lifetimes: {
    attached: function () {
      // 在组件实例进入页面节点树时执行
    },
    detached: function () {
      // 在组件实例被从页面节点树移除时执行
    },
  },
  // ...
});

在 behaviors 中也可以编写生命周期方法,同时不会与其他 behaviors 中的同名生命周期相互覆盖。但要注意,如果一个组件多次直接或间接引用同一个 behavior ,这个 behavior 中的生命周期函数在一个执行时机内只会执行一次。

可用的全部生命周期如下表所示。

生命周期参数描述
created在组件实例刚刚被创建时执行。
attached在组件实例进入页面节点树时执行。
detached在组件实例被从页面节点树移除时执行。
ready在组件在视图层布局完成后执行。

 

组件所在页面的生命周期

还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为 组件所在页面的生命周期,在 pageLifetimes 定义段中定义。其中可用的生命周期包括:

生命周期参数描述最低版本
show组件所在的页面被展示时执行。/
hide组件所在的页面被隐藏时执行。/
resize组件所在的页面尺寸发生改变。2.6.2

示例代码:

Component({
  pageLifetimes: {
    show: function () {
      // 页面被展示
    },
    hide: function () {
      // 页面被隐藏
    },
    resize: function () {
      // 页面尺寸发生改变
    },
  },
});

 

定义和使用组件间关系

有时需要实现这样的组件:

<custom-ul>
  <custom-li> item 1 </custom-li>
  <custom-li> item 2 </custom-li>
</custom-ul>

这个例子中,custom-ul 和 custom-li 都是自定义组件,它们有相互间的关系,相互间的通信往往比较复杂。此时,在组件定义时加入 relations 定义段,可以解决这样的问题。示例:

// path/to/custom-ul.js
Component({
  relations: {
    './custom-li': {
      type: 'child', // 关联的目标节点应为子节点
      linked: function (target) {
        // 每次有custom-li被插入时执行,target是该节点实例对象,在该节点attached生命周期之后触发
      },
      linkChanged: function (target) {
        // 每次有custom-li被移动后执行,target是该节点实例对象,在该节点moved生命周期之后触发
      },
      unlinked: function (target) {
        // 每次有custom-li被移除时执行,target是该节点实例对象,在该节点detached生命周期之后触发
      },
    },
  },
});
// path/to/custom-li.js
Component({
  relations: {
    './custom-ul': {
      type: 'parent', // 关联的目标节点应为父节点
      linked: function (target) {
        // 每次被插入到custom-ul时执行,target是custom-ul节点实例对象,在custom-ul节点attached生命周期之后触发
      },
      linkChanged: function (target) {
        // 每次被移动后执行,target是custom-ul节点实例对象,在custom-ul节点moved生命周期之后触发
      },
      unlinked: function (target) {
        // 每次被移除时执行,target是custom-ul节点实例对象,在custom-ul节点detached生命周期之后触发
      },
    },
  },
});

注意:必须在两个组件定义中都加入 relations 定义,否则不会生效。

 

relations 定义段

relations 定义段包含目标组件路径及其对应选项,可包含的选项见下表。

选项类型是否必须描述
typeString目标组件的相对关系,可选的值为 parent、 child、 ancestor 和 descendant
linkedFunction关系生命周期函数,当关系被建立在页面节点树中时触发,触发时机在组件 attached 生命周期之后。
unlinkedFunction关系生命周期函数,当关系脱离页面节点树时触发,触发时机在组件 detached 生命周期之后。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IoT砖家涂拉拉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值