• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 挂载卸载事件
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @jiangtao92-->
5<!--Designer: @piggyguy-->
6<!--Tester: @songyanhong-->
7<!--Adviser: @HelloCrease-->
8
9挂载卸载事件指组件从组件树上挂载、卸载时触发的事件。
10
11> **说明:**
12>
13> 从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15## onAttach<sup>12+</sup>
16
17onAttach(callback: Callback\<void>): T
18
19组件挂载到组件树时触发此回调。
20
21> **说明:**
22>
23> 回调在组件布局渲染前调用。
24>
25> 不允许在回调中对组件树进行变更,例如启动动画或使用if-else变更组件树结构。
26
27**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.ArkUI.ArkUI.Full
30
31**参数:**
32
33| 参数名 | 类型  | 必填 | 说明                       |
34| ------ | ------ | ---- | -------------------------- |
35| callback  | [Callback](./ts-types.md#callback12)\<void>   | 是   | onAttach事件的回调函数,表示组件已经挂载至组件树。|
36
37**返回值:**
38
39| 类型 | 说明 |
40| -------- | -------- |
41| T | 返回当前组件。 |
42
43
44## onDetach<sup>12+</sup>
45
46onDetach(callback: Callback\<void>): T
47
48组件从组件树卸载时触发此回调。
49
50**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
51
52**系统能力:** SystemCapability.ArkUI.ArkUI.Full
53
54**参数:**
55
56| 参数名 | 类型  | 必填 | 说明                       |
57| ------ | ------ | ---- | -------------------------- |
58| callback  | [Callback](./ts-types.md#callback12)\<void> | 是   | onDetach事件的回调函数,表示组件已经从组件树卸载。|
59
60**返回值:**
61
62| 类型 | 说明 |
63| -------- | -------- |
64| T | 返回当前组件。 |
65
66## onAppear
67
68onAppear(event: () => void): T
69
70组件挂载显示后触发此回调。
71
72> **说明:**
73>
74> 回调的调用时机有可能发生在组件布局渲染后。
75
76**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
77
78**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
79
80**系统能力:** SystemCapability.ArkUI.ArkUI.Full
81
82**参数:**
83
84| 参数名 | 类型  | 必填 | 说明                       |
85| ------ | ------ | ---- | -------------------------- |
86| event  | () => void| 是   | onAppear事件的回调函数,表示组件已挂载显示。|
87
88**返回值:**
89
90| 类型 | 说明 |
91| -------- | -------- |
92| T | 返回当前组件。 |
93
94
95## onDisAppear
96
97onDisAppear(event: () => void): T
98
99组件从组件树卸载消失时触发此回调。
100
101**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
102
103**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
104
105**系统能力:** SystemCapability.ArkUI.ArkUI.Full
106
107**参数:**
108
109| 参数名 | 类型  | 必填 | 说明                       |
110| ------ | ------ | ---- | -------------------------- |
111| event  | () => void| 是   | onDisAppear事件的回调函数,表示组件已卸载消失。|
112
113**返回值:**
114
115| 类型 | 说明 |
116| -------- | -------- |
117| T | 返回当前组件。 |
118
119
120## 示例
121
122该示例通过按钮控制组件的挂载和卸载,触发onAttach和onDetach事件。
123
124```ts
125// xxx.ets
126import { promptAction } from '@kit.ArkUI';
127
128@Entry
129@Component
130struct AppearExample {
131  @State isShow: boolean = true;
132  @State changeAppear: string = '点我卸载挂载组件';
133  private myText: string = 'Text for onAppear';
134
135  build() {
136    Column() {
137      Button(this.changeAppear)
138        .onClick(() => {
139          this.isShow = !this.isShow
140        }).margin(15)
141      if (this.isShow) {
142        Text(this.myText).fontSize(26).fontWeight(FontWeight.Bold)
143          .onAttach(() => {
144            this.getUIContext().getPromptAction().showToast({
145              message: 'The text is shown',
146              duration: 2000,
147              bottom: 500
148            })
149          })
150          .onDetach(() => {
151            this.getUIContext().getPromptAction().showToast({
152              message: 'The text is hidden',
153              duration: 2000,
154              bottom: 500
155            })
156          })
157      }
158    }.padding(30).width('100%')
159  }
160}
161```
162
163![zh-cn_image_0000001219864151](figures/zh-cn_image_0000001219864151.gif)
164