生命周期接口

页面生命周期

属性类型参数返回值描述触发时机
onInitFunction监听页面初始化当页面完成初始化时调用,只触发一次
onReadyFunction监听页面创建完成当页面完成创建可以显示时触发,只触发一次
onShowFunction监听页面显示当进入页面时触发
onHideFunction监听页面隐藏当页面跳转离开时触发
onDestroyFunction监听页面退出当页面跳转离开(不进入导航栈)时触发
onBackPressFunctionBoolean监听返回按钮动作当用户点击返回按钮时触发。返回 true 表示页面自己处理返回逻辑,返回 false 表示使用默认的返回逻辑,不返回值会作为 false 处理
onMenuPressFunction监听菜单按钮动作当用户点击菜单按钮时触发
onRefresh1050+FunctionObject监听页面重新打开1.当页面在manifest中 launchMode1050+ 标识为'singleTask'时,仅会存在一个目标页面实例,用户多次打开目标页面时触发此函数。2.打开目标页面时在push参数中携带flag 'clearTask',且页面实例已经存在时触发。该回调中参数为重新打开该页面时携带的参数。详见页面启动模式

页面的生命周期接口的调用顺序:

  • 打开页面 A:onInit() -> onReady() -> onShow()
  • 在页面 A 打开页面 B:onHide()
  • 从页面 B 返回页面 A:onShow()
  • A 页面返回:onBackPress() -> onHide() -> onDestroy()

自定义组件的生命周期 1050+

自定义组件,指的是通过语法引入的ViewModel组件

属性类型参数返回值描述触发时机
onInitFunction监听初始化当数据驱动化完成时触发
onReadyFunction监听模板创建完成当模板创建完成时触发
onDestroyFunction监听组件销毁当销毁时触发

应用生命周期

onCreate()

监听应用创建,应用创建时调用

参数

onDestroy()

监听应用销毁,应用销毁时调用

参数

onError(Object) 1030+

监听应用报错,应用捕获异常时调用

参数
参数名类型描述
messageString错误描述
stackString调用栈

消息通道(BroadcastChannel) 1000+

用来实现不同页面之间的相互通信。

接口说明

在 BroadcastChannel 的构造函数中,只支持接受一个参数,就是"频道名称"(channel name)

比如:

  1. const test = new BroadcastChannel('channel')

BroadcastChannel 定义的接口如下:

  1. declare interface BroadcastChannel = {
  2. name: string,
  3. postMessage: (message: any) => void;
  4. onmessage: (event: MessageEvent) => void;
  5. close: () => void;
  6. }

消息对象(MessageEvent)的类型定义如下:

  1. declare interface MessageEvent = {
  2. type: string, // "message"
  3. data: any
  4. }

对参数的说明:

名称类型参数描述
nameStringString:频道名称频道名称,区分不同的消息频道(注意:不同频道之间不可通信)。
postMessageFunctionObject: 消息内容用于在当前频道中广播消息。
onmessageFunctionEvent:消息对象订阅消息。在频道中接收到广播消息之后,会给所有订阅者派发消息事件。
closeFunction关闭当前的频道。

用法

假设在我们的应用中,有 A、B、C 三个页面

在页面 A 中:

  1. const pageA = new BroadcastChannel('channel1')
  2. pageA.postMessage('haha!')

在页面 B 中:

  1. const pageB = new BroadcastChannel('channel1')

在页面 C 中:

  1. const pageC = new BroadcastChannel('channel1')
  2. pageC.onmessage = function(event) {
  3. console.log(event.data)
  4. pageC.postMessage('hello, i am here!')
  5. }

这样,页面 A 、B 、C 都创建一个监听了 'channel1' 频道的 BroadcastChannel 对象,它们之间可以通过这个对象实现互相通信。

当 pageA 发布了 'haha!' 消息时,pageC 将收到一个消息事件,其 data 字段等于 'haha!',然后也向频道中回复一条消息。注意:自己不会收到自己发的消息。

但是 pageB 并不会收到这些消息,因为他没有实现 onmessage 方法,相当于没有接收频道中的消息,所以他实际上不是一个订阅者。

注意:在 pageA 销毁 channel 当前不与页面 context 进行上下文绑定,需要主动关闭消息通道,如下所示:

  1. const pageA = new BroadcastChannel('tom')
  2. pageA.close()