• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NavDestination
2
3作为子页面的根容器,用于显示[Navigation](ts-basic-components-navigation.md)的内容区。
4
5> **说明:**
6>
7> - 该组件从API version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - 该组件从API version 11开始默认支持安全区避让特性(默认值为:expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])),开发者可以重写该属性覆盖默认行为,API version 11之前的版本需配合[expandSafeArea](ts-universal-attributes-expand-safe-area.md)属性实现安全区避让。
10>
11> - NavDestination组件必须配合Navigation使用,作为Navigation目的页面的根节点,单独使用只能作为普通容器组件,不具备路由相关属性能力。
12>
13> - 如果页面栈中间页面的生命周期发生变化,跳转之前的栈顶Destination的生命周期(onWillShow, onShown, onHidden, onWillDisappear)与跳转之后的栈顶Destination的生命周期(onWillShow, onShown, onHidden, onWillDisappear)均在最后触发。
14>
15> - NavDestination未设置主副标题并且没有返回键时,不显示标题栏。
16
17## 子组件
18
19> **说明:**
20>
21> - 子组件类型:系统组件和自定义组件,支持渲染控制类型([if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)和[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md))。
22> - 子组件个数:多个。
23
24
25## 接口
26
27NavDestination()
28
29创建[Navigation](ts-basic-components-navigation.md)子页面的根容器。
30
31**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
32
33**系统能力:** SystemCapability.ArkUI.ArkUI.Full
34
35## 属性
36
37支持[通用属性](ts-component-general-attributes.md)。
38
39不推荐设置位置、大小等布局相关属性,可能会造成页面显示异常。
40
41### title
42
43title(value: string | CustomBuilder | NavDestinationCommonTitle | NavDestinationCustomTitle | Resource, options?: NavigationTitleOptions)
44
45设置页面标题。使用NavigationCustomTitle类型设置height高度时,[titleMode](ts-basic-components-navigation.md#titlemode)属性不会生效。字符串超长时,如果不设置副标题,先缩小再换行2行后以...截断。如果设置副标题,先缩小后以...截断。
46
47**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
48
49**系统能力:** SystemCapability.ArkUI.ArkUI.Full
50
51**参数:**
52
53| 参数名 | 类型                                                         | 必填 | 说明       |
54| ------ | ------------------------------------------------------------ | ---- | ---------- |
55| value  | string&nbsp;\|&nbsp;[CustomBuilder](ts-types.md#custombuilder8)&nbsp;\|&nbsp;[NavDestinationCommonTitle](#navdestinationcommontitle)&nbsp;\|&nbsp;[NavDestinationCustomTitle](#navdestinationcustomtitle)&nbsp;\|&nbsp;[Resource<sup>14+</sup>](ts-types.md#resource)  | 是   | 页面标题。 |
56| options<sup>12+</sup> | [NavigationTitleOptions](ts-basic-components-navigation.md#navigationtitleoptions11) | 否   | 标题栏选项。 |
57
58### hideTitleBar
59
60hideTitleBar(value: boolean)
61
62设置是否隐藏标题栏。
63
64**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
65
66**系统能力:** SystemCapability.ArkUI.ArkUI.Full
67
68**参数:**
69
70| 参数名 | 类型    | 必填 | 说明                                                         |
71| ------ | ------- | ---- | ------------------------------------------------------------ |
72| value  | boolean | 是   | 是否隐藏标题栏。<br/>默认值:false<br/>true:&nbsp;隐藏标题栏。<br/>false:&nbsp;显示标题栏。 |
73
74### hideTitleBar<sup>13+</sup>
75
76hideTitleBar(hide: boolean, animated: boolean)
77
78设置是否隐藏标题栏。与[hideTitleBar](#hidetitlebar)相比,新增标题栏显隐时是否使用动画。
79
80**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
81
82**系统能力:** SystemCapability.ArkUI.ArkUI.Full
83
84**参数:**
85
86| 参数名 | 类型    | 必填 | 说明                                                         |
87| ------ | ------- | ---- | ------------------------------------------------------------ |
88| hide  | boolean | 是   | 是否隐藏标题栏。<br/>默认值:false<br/>true:隐藏标题栏。<br/>false:显示标题栏。 |
89| animated  | boolean | 是   | 设置是否使用动画显隐标题栏。<br/>默认值:false<br/>true:使用动画显示隐藏标题栏。<br/>false:不使用动画显示隐藏标题栏。 |
90
91### toolbarConfiguration<sup>13+</sup>
92
93toolbarConfiguration(toolbarParam: Array&lt;ToolbarItem&gt; | CustomBuilder, options?: NavigationToolbarOptions)
94
95设置工具栏内容。未调用本接口时不显示工具栏。
96
97**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
98
99**系统能力:** SystemCapability.ArkUI.ArkUI.Full
100
101**参数:**
102
103| 参数名       | 类型                                                         | 必填 | 说明                                                         |
104| ------------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
105| toolbarParam | &nbsp;Array&lt;[ToolbarItem](ts-basic-components-navigation.md#toolbaritem10)&gt; &nbsp;\|&nbsp;[CustomBuilder](ts-types.md#custombuilder8) | 是   | 工具栏内容。<br/>使用Array&lt;[ToolbarItem](ts-basic-components-navigation.md#toolbaritem10)&gt;写法设置的工具栏有如下特性:<br/>-工具栏所有选项均分底部工具栏,在每个均分内容区布局文本和图标。<br/>-文本超长时,若工具栏选项个数小于5个,优先拓展选项的宽度,工具栏最大宽度与屏幕等宽,其次逐级缩小,缩小之后换行,最后截断。<br/>-竖屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标中,点击更多图标,可以展示剩余内容。横屏时,如果为[Split](ts-basic-components-navigation.md#navigationmode9枚举说明)模式,仍按照竖屏规则显示,如果为[Stack](ts-basic-components-navigation.md#navigationmode9枚举说明)模式需配合menus属性的Array&lt;[NavigationMenuItem](ts-basic-components-navigation.md#navigationmenuitem)&gt;使用,底部工具栏会自动隐藏,同时底部工具栏所有选项移动至页面右上角菜单。<br/>使用[CustomBuilder](ts-types.md#custombuilder8)写法为用户自定义工具栏选项,除均分底部工具栏外不具备以上功能。 |
106| options      | [NavigationToolbarOptions](ts-basic-components-navigation.md#navigationtoolbaroptions11) | 否   | 工具栏选项。包含工具栏背景颜色、工具栏背景模糊样式、工具栏布局方式。                                                 |
107
108> **说明:**
109>
110> 不支持通过SymbolGlyphModifier对象的fontSize属性修改图标大小、effectStrategy属性修改动效、symbolEffect属性修改动效类型。
111
112### hideToolBar<sup>13+</sup>
113
114hideToolBar(hide: boolean, animated?: boolean)
115
116设置是否隐藏工具栏。与[hideToolBar](ts-basic-components-navigation.md#hidetoolbar)相比,新增工具栏显隐时是否使用动画。
117
118**原子化服务API:** 从API version 13开始,该接口支持在原子化服务中使用。
119
120**系统能力:** SystemCapability.ArkUI.ArkUI.Full
121
122**参数:**
123
124| 参数名 | 类型    | 必填 | 说明                                                         |
125| ------ | ------- | ---- | ------------------------------------------------------------ |
126| hide  | boolean | 是   | 是否隐藏工具栏。<br/>默认值:false<br/>true:隐藏工具栏。<br/>false:显示工具栏。 |
127| animated  | boolean | 否   | 设置是否使用动画显隐工具栏。<br/>默认值:false<br/>true:使用动画显示隐藏工具栏。<br/>false:不使用动画显示隐藏工具栏。 |
128
129### mode <sup>11+</sup>
130
131mode(value: NavDestinationMode)
132
133设置NavDestination类型,不支持动态修改。
134
135**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
136
137**系统能力:** SystemCapability.ArkUI.ArkUI.Full
138
139**参数:**
140
141| 参数名 | 类型                                                 | 必填 | 说明                                                         |
142| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
143| value  | [NavDestinationMode](#navdestinationmode枚举说明11) | 是   | NavDestination类型。<br/>默认值:NavDestinationMode.STANDARD |
144
145### backButtonIcon<sup>11+</sup>
146
147backButtonIcon(value: ResourceStr | PixelMap | SymbolGlyphModifier)
148
149> **说明:**
150>
151> 不支持通过SymbolGlyphModifier对象的fontSize属性修改图标大小、effectStrategy属性修改动效、symbolEffect属性修改动效类型。
152
153
154设置标题栏返回键图标。
155
156**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
157
158**系统能力:** SystemCapability.ArkUI.ArkUI.Full
159
160**参数:**
161
162| 参数名 | 类型                                                         | 必填 | 说明               |
163| ------ | ------------------------------------------------------------ | ---- | ------------------ |
164| value  | [ResourceStr](ts-types.md#resourcestr)&nbsp;\|&nbsp;[PixelMap](../../apis-image-kit/js-apis-image.md#pixelmap7)&nbsp;\|&nbsp;[SymbolGlyphModifier<sup>12+</sup>](ts-universal-attributes-attribute-modifier.md)  | 是   | 标题栏返回键图标。 |
165
166### menus<sup>12+</sup>
167
168menus(value: Array&lt;NavigationMenuItem&gt; | CustomBuilder)
169
170> **说明:**
171>
172> 不支持通过SymbolGlyphModifier对象的fontSize属性修改图标大小、effectStrategy属性修改动效、symbolEffect属性修改动效类型。
173
174
175设置页面右上角菜单。不设置时不显示菜单项。使用Array<[NavigationMenuItem](ts-basic-components-navigation.md#navigationmenuitem)&gt; 写法时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。
176
177**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
178
179**系统能力:** SystemCapability.ArkUI.ArkUI.Full
180
181**参数:**
182
183| 参数名 | 类型                                                         | 必填 | 说明               |
184| ------ | ------------------------------------------------------------ | ---- | ------------------ |
185| value  | Array<[NavigationMenuItem](ts-basic-components-navigation.md#navigationmenuitem)&gt;&nbsp;\|&nbsp;[CustomBuilder](ts-types.md#custombuilder8) | 是   | 页面右上角菜单。 |
186
187### ignoreLayoutSafeArea<sup>12+</sup>
188
189ignoreLayoutSafeArea(types?: Array&lt;LayoutSafeAreaType&gt;, edges?: Array&lt;LayoutSafeAreaEdge&gt;)
190
191控制组件的布局,使其扩展到非安全区域
192
193**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
194
195**系统能力:** SystemCapability.ArkUI.ArkUI.Full
196
197**参数:**
198
199| 参数名 | 类型                                               | 必填 | 说明                                                         |
200| ------ | -------------------------------------------------- | ---- | ------------------------------------------------------------ |
201| types  | Array <[LayoutSafeAreaType](ts-types.md#layoutsafeareatype12)> | 否   | 配置扩展安全区域的类型。<br />默认值:<br />[LayoutSafeAreaType.SYSTEM] |
202| edges  | Array <[LayoutSafeAreaEdge](ts-types.md#layoutsafeareaedge12)> | 否   | 配置扩展安全区域的方向。<br /> 默认值:<br />[LayoutSafeAreaEdge.TOP, LayoutSafeAreaEdge.BOTTOM]。|
203
204>  **说明:**
205>
206>  组件设置ignoreLayoutSafeArea之后生效的条件为:
207>  设置LayoutSafeAreaType.SYSTEM时,组件的边界与非安全区域重合时组件能够延伸到非安全区域下。例如:设备顶部状态栏高度100,组件在屏幕中纵向方位的绝对偏移需要在0到100之间。
208>
209>  若组件延伸到非安全区域内,此时在非安全区域里触发的事件(例如:点击事件)等可能会被系统拦截,优先响应状态栏等系统组件。
210
211### systemBarStyle<sup>12+</sup>
212
213systemBarStyle(style: Optional&lt;SystemBarStyle&gt;)
214
215当Navigation中显示当前NavDestination时,设置对应系统状态栏的样式。
216
217**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
218
219**系统能力:** SystemCapability.ArkUI.ArkUI.Full
220
221**参数:**
222
223| 参数名 | 类型         | 必填 | 说明               |
224| ------ | -------------- | ---- | ------------------ |
225| style  | [Optional](ts-universal-attributes-custom-property.md#optional12)&lt;[SystemBarStyle](../js-apis-window.md#systembarstyle12)&gt; | 是   | 系统状态栏样式。 |
226
227> **说明:**
228>
229> 1. 必须配合Navigation使用,作为其Navigation目的页面的根节点时才能生效。
230> 2. 其他使用限制请参考Navigation对应的[systemBarStyle](ts-basic-components-navigation.md#systembarstyle12)属性说明。
231
232### systemTransition<sup>14+</sup>
233systemTransition(type: NavigationSystemTransitionType)
234
235设置NavDestination系统转场动画,支持分别设置系统标题栏动画和内容动画。
236
237**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
238
239**系统能力:** SystemCapability.ArkUI.ArkUI.Full
240
241**参数:**
242
243| 参数名 | 类型                                                 | 必填 | 说明                                                         |
244| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
245| type  | [NavigationSystemTransitionType](#navigationsystemtransitiontype14枚举说明) | 是   | 系统转场动画类型。<br/>默认值: NavigationSystemTransitionType.DEFAULT |
246
247### recoverable<sup>14+</sup>
248
249recoverable(recoverable: Optional&lt;boolean&gt;)
250
251配置NavDestination是否可恢复。如配置为可恢复,当应用进程异常退出并重新冷启动时,可自动创建该NavDestination。该功能需NavDestination对应的Navigation也配置了[可恢复属性](ts-basic-components-navigation.md#recoverable14)。
252
253**系统能力:** SystemCapability.ArkUI.ArkUI.Full
254
255**参数:**
256
257| 参数名 | 类型         | 必填 | 说明               |
258| ------ | -------------- | ---- | ------------------ |
259| recoverable  | [Optional](ts-universal-attributes-custom-property.md#optional12)&lt;boolean&gt; | 是   | NavDestination是否可恢复,默认为不可恢复。<br/>默认值:false<br/>true:页面栈可恢复。<br/>false:页面栈不可恢复。 |
260
261>  **使用说明:**
262>
263> 该接口需要配合Navigation的[recoverable](./ts-basic-components-navigation.md#recoverable14)接口使用。
264
265### bindToScrollable<sup>14+</sup>
266bindToScrollable(scrollers: Array&lt;Scroller&gt;)
267
268绑定NavDestination组件和可滚动容器组件(支持[List](./ts-container-list.md)、[Scroll](./ts-container-scroll.md)、[Grid](./ts-container-grid.md)、[WaterFlow](./ts-container-waterflow.md)),当滑动可滚动容器组件时,会触发所有与其绑定的NavDestination组件的标题栏和工具栏的显示和隐藏动效,上滑隐藏,下滑显示。一个NavDestination可与多个可滚动容器组件绑定,一个可滚动容器组件也可与多个NavDestination绑定。使用示例参见[示例1](#示例1标题栏工具栏与可滚动类组件联动)。
269
270> **说明:**
271>
272> - 只有NavDestination的标题栏或工具栏设置为可见时,联动效果才会生效。
273> - 当多个可滚动容器组件绑定了同一个NavDestination组件时,滚动任何一个容器都会触发标题栏和工具栏的显示或隐藏效果。且当任何一个可滚动容器组件滑动到底部或顶部位置时,会立即触发标题栏和工具栏的显示动效。因此,为了获得最佳用户体验,不建议同时触发多个可滚动容器组件的滚动事件。
274
275**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
276
277**系统能力:** SystemCapability.ArkUI.ArkUI.Full
278
279**参数:**
280
281| 参数名 | 类型                                                 | 必填 | 说明                                                         |
282| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
283| scrollers | Array<[Scroller](./ts-container-scroll.md#scroller)> | 是   | 可滚动容器组件的控制器。 |
284
285### bindToNestedScrollable<sup>14+</sup>
286bindToNestedScrollable(scrollInfos: Array&lt;NestedScrollInfo&gt;)
287
288绑定NavDestination组件和嵌套的可滚动容器组件(支持[List](./ts-container-list.md)、[Scroll](./ts-container-scroll.md)、[Grid](./ts-container-grid.md)、[WaterFlow](./ts-container-waterflow.md)),当滑动父组件或子组件时,会触发所有与其绑定的NavDestination组件的标题栏和工具栏的显示和隐藏动效,上滑隐藏,下滑显示。一个NavDestination可与多个嵌套的可滚动容器组件绑定,嵌套的可滚动容器组件也可与多个NavDestination绑定。使用示例参见[示例1](#示例1标题栏工具栏与可滚动类组件联动)。
289
290> **说明:**
291>
292> - 只有NavDestination的标题栏或工具栏设置为可见时,联动效果才会生效。
293> - 当多个可滚动容器组件绑定了同一个NavDestination组件时,滚动任何一个容器都会触发标题栏和工具栏的显示或隐藏效果。且当任何一个可滚动容器组件滑动到底部或顶部位置时,会立即触发标题栏和工具栏的显示动效。因此,为了获得最佳用户体验,不建议同时触发多个可滚动容器组件的滚动事件。
294
295**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
296
297**系统能力:** SystemCapability.ArkUI.ArkUI.Full
298
299**参数:**
300
301| 参数名 | 类型                                                 | 必填 | 说明                                                         |
302| ------ | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
303| scrollInfos | Array<[NestedScrollInfo](#nestedscrollinfo14)> | 是   | 嵌套的可滚动容器组件的控制器。 |
304
305### hideBackButton<sup>15+</sup>
306
307hideBackButton(hide: Optional&lt;boolean&gt;)
308
309设置是否隐藏标题栏中的返回键。
310
311**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
312
313**系统能力:** SystemCapability.ArkUI.ArkUI.Full
314
315**参数:**
316
317| 参数名 | 类型    | 必填 | 说明                                                         |
318| ------ | ------- | ---- | ------------------------------------------------------------ |
319| hide  | [Optional](ts-universal-attributes-custom-property.md#optional12)&lt;boolean&gt; | 是   | 是否隐藏标题栏中的返回键。 <br/>默认值:false<br/>true:隐藏返回键。<br/>false:显示返回键。 |
320
321### customTransition<sup>15+</sup>
322
323customTransition(delegate: NavDestinationTransitionDelegate)
324
325设置NavDestination自定义转场动画。
326
327> **说明:**
328>
329> 该属性与[systemTransition](#systemtransition14)同时设置时,后设置的属性生效。
330
331**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
332
333**系统能力:** SystemCapability.ArkUI.ArkUI.Full
334
335**参数:**
336
337| 参数名 | 类型    | 必填 | 说明                                                         |
338| ------ | ------- | ---- | ------------------------------------------------------------ |
339| delegate  | [NavDestinationTransitionDelegate](#navdestinationtransitiondelegate15) | 是   | NavDestination自定义动画的代理函数。 |
340
341## NavDestinationMode枚举说明<sup>11+</sup>
342
343NavDestination类型。
344
345**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
346
347**系统能力:** SystemCapability.ArkUI.ArkUI.Full
348
349| 名称   | 值 | 说明                                     |
350| ---- | --- | ---------------------------------------- |
351| STANDARD | 0 | 标准模式的NavDestination。                       |
352| DIALOG | 1 | 默认透明,进出页面栈不影响下层NavDestination的生命周期。<br />API version 13之前,默认无系统转场动画。从API version 13开始,支持系统转场动画。  |
353
354## NavigationSystemTransitionType<sup>14+</sup>枚举说明
355
356系统转场动画类型。
357
358**系统能力:** SystemCapability.ArkUI.ArkUI.Full
359
360| 名称   | 值   | 说明 |
361| ----  | ---   | ----- |
362| DEFAULT | 0 | 默认系统转场动画。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
363| NONE| 1 | 无系统转场动画。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
364| TITLE | 2 | 标题栏系统转场动画。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
365| CONTENT | 3 | 内容区系统转场动画。<br/>**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。|
366| FADE<sup>15+</sup> | 4 | 渐变类型的系统转场动画。<br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
367| EXPLODE<sup>15+</sup> | 5 | 中心缩放类型的系统转场动画。<br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
368| SLIDE_RIGHT<sup>15+</sup> | 6 | 右侧平移类型的系统转场动画。<br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
369| SLIDE_BOTTOM<sup>15+</sup> | 7 | 底部平移类型的系统转场动画。<br/>**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 |
370
371**说明:**
372>
373> 设置系统转场动画,支持分别设置系统标题栏动画和内容动画。
374>
375> 系统默认转场动画中只有STANDARD页面的push和pop动画有单独的标题栏动画,存在如下限制:
376> 1. 设置NavigationSystemTransitionType为TITLE时,系统转场只有标题栏动画。
377> 2. 设置NavigationSystemTransitionType为CONTENT时,系统转场只有内容区动画。
378>
379> 设置NONE或者TITLE时没有系统转场动画,设置CONTENT和DEFAULT时默认系统转场动画。
380
381## 事件
382
383除支持[通用事件](ts-component-general-events.md)外,还支持如下事件:
384
385### onShown<sup>10+</sup>
386
387onShown(callback:&nbsp;()&nbsp;=&gt;&nbsp;void)
388
389当该NavDestination页面显示时触发此回调。
390
391**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
392
393**系统能力:** SystemCapability.ArkUI.ArkUI.Full
394
395### onHidden<sup>10+</sup>
396
397onHidden(callback:&nbsp;()&nbsp;=&gt;&nbsp;void)
398
399当该NavDestination页面隐藏时触发此回调。
400
401**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
402
403**系统能力:** SystemCapability.ArkUI.ArkUI.Full
404
405### onWillAppear<sup>12+</sup>
406
407onWillAppear(callback: Callback\<void>)
408
409当该Destination挂载之前触发此回调。在该回调中允许修改页面栈,当前帧生效。
410
411**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
412
413**系统能力:** SystemCapability.ArkUI.ArkUI.Full
414
415### onWillShow<sup>12+</sup>
416
417onWillShow(callback: Callback\<void>)
418
419当该Destination显示之前触发此回调。
420
421**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
422
423**系统能力:** SystemCapability.ArkUI.ArkUI.Full
424
425### onWillHide<sup>12+</sup>
426
427onWillHide(callback: Callback\<void>)
428
429当该Destination隐藏之前触发此回调。
430
431**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
432
433**系统能力:** SystemCapability.ArkUI.ArkUI.Full
434
435### onWillDisappear<sup>12+</sup>
436
437onWillDisappear(callback: Callback\<void>)
438
439当该Destination卸载之前触发的生命周期(有转场动画时,在转场动画开始之前触发)。
440
441**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
442
443**系统能力:** SystemCapability.ArkUI.ArkUI.Full
444
445### onBackPressed<sup>10+</sup>
446
447onBackPressed(callback:&nbsp;()&nbsp;=&gt;&nbsp;boolean)
448
449当与Navigation绑定的页面栈中存在内容时,此回调生效。当点击返回键时,触发该回调。
450
451返回值为true时,表示重写返回键逻辑,返回值为false时,表示回退到上一个页面。
452
453**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
454
455**系统能力:** SystemCapability.ArkUI.ArkUI.Full
456
457### onReady<sup>11+</sup>
458
459onReady(callback:&nbsp;[Callback](../../apis-basic-services-kit/js-apis-base.md#callback)<[NavDestinationContext](#navdestinationcontext11)>)
460
461当NavDestination即将构建子组件之前会触发此回调。
462
463**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
464
465**系统能力:** SystemCapability.ArkUI.ArkUI.Full
466
467### onResult<sup>15+</sup>
468
469onResult(callback:&nbsp;Optional\<Callback\<ESObject\>\>)
470
471NavDestination返回时触发该回调。
472
473**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
474
475**系统能力:** SystemCapability.ArkUI.ArkUI.Full
476
477**参数:**
478| 参数名 | 类型 | 必填 | 说明 |
479| ------ | ------ | ---- | ---------------- |
480|callback | [Optional](./ts-universal-attributes-custom-property.md)\<[Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\<ESObject\>\>| 是 | 页面返回回调,入参为[pop](ts-basic-components-navigation.md#pop11)、[popToName](ts-basic-components-navigation.md#poptoname11)、[popToIndex](ts-basic-components-navigation.md#poptoindex11)接口传入的result参数。如果不传该参数,入参为undefined。|
481
482### onActive<sup>17+</sup>
483
484onActive(callback:&nbsp;Optional\<Callback\<NavDestinationActiveReason\>\>)
485
486NavDestination处于激活态(处于栈顶可操作,且上层无特殊组件遮挡)时,触发该回调。
487
488**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。
489
490**系统能力:** SystemCapability.ArkUI.ArkUI.Full
491
492**参数:**
493| 参数名 | 类型 | 必填 | 说明 |
494| ------ | ------ | ---- | ---------------- |
495|callback | [Optional](./ts-universal-attributes-custom-property.md#optional12)\<[Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\<[NavDestinationActiveReason](#navdestinationactivereason17)\>\>| 是 | NavDestination由非激活态变为激活态的原因。|
496
497### onInactive<sup>17+</sup>
498
499onInactive(callback: &nbsp;Optional\<Callback\<NavDestinationActiveReason\>\>)
500
501NavDestination处于非激活态(处于非栈顶不可操作,或处于栈顶时上层有特殊组件遮挡)时,触发该回调。
502
503**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。
504
505**系统能力:** SystemCapability.ArkUI.ArkUI.Full
506
507**参数:**
508| 参数名 | 类型 | 必填 | 说明 |
509| ------ | ------ | ---- | ---------------- |
510|callback | [Optional](./ts-universal-attributes-custom-property.md#optional12)\<[Callback](../../apis-basic-services-kit/js-apis-base.md#callback)\<[NavDestinationActiveReason](#navdestinationactivereason17)\>\>| 是 | NavDestination由激活态变为非激活态的原因。|
511
512## NavDestinationCommonTitle
513
514NavDestination通用标题。
515
516**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
517
518**系统能力:** SystemCapability.ArkUI.ArkUI.Full
519
520| 名称   | 类型     | 必填   | 说明     |
521| ---- | ------ | ---- | ------ |
522| main | string \| [Resource<sup>14+<sup>](ts-types.md#resource) | 是    | 设置主标题。 |
523| sub  | string \| [Resource<sup>14+<sup>](ts-types.md#resource) | 是    | 设置副标题。 |
524
525## NavDestinationCustomTitle
526
527NavDestination自定义标题。
528
529**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
530
531**系统能力:** SystemCapability.ArkUI.ArkUI.Full
532
533| 名称      | 类型                                       | 必填   | 说明       |
534| ------- | ---------------------------------------- | ---- | -------- |
535| builder | [CustomBuilder](ts-types.md#custombuilder8) | 是    | 设置标题栏内容。 |
536| height  | [TitleHeight](ts-appendix-enums.md#titleheight9) \| [Length](ts-types.md#length) | 是    | 设置标题栏高度。<br/>取值范围:[0, +∞)。 |
537
538## NavDestinationContext<sup>11+</sup>
539
540NavDestination上下文信息。
541
542**系统能力:** SystemCapability.ArkUI.ArkUI.Full
543
544| 名称   | 类型     | 必填   |  说明     |
545| ---- | ------ | ----- | ------ |
546| pathInfo | [NavPathInfo](ts-basic-components-navigation.md#navpathinfo10) | 是 | 跳转NavDestination时指定的参数。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
547| pathStack  | [NavPathStack](ts-basic-components-navigation.md#navpathstack10) | 是 | 当前NavDestination所处的页面栈。 <br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
548| navDestinationId<sup>12+</sup> | string | 否 | 当前NavDestination的唯一ID,由系统自动生成,和组件通用属性id无关。 <br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
549
550### getConfigInRouteMap<sup>12+</sup>
551
552getConfigInRouteMap(): RouteMapConfig |undefined
553
554获取当前NavDestination的路由配置信息。
555
556**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
557
558**系统能力:** SystemCapability.ArkUI.ArkUI.Full
559
560**返回值**
561
562| 类型 | 说明 |
563| --- | --- |
564| [RouteMapConfig](#routemapconfig12) | 当前页面路由配置信息。 |
565| undefined | 当该页面不是通过路由表配置时返回undefined。 |
566
567## RouteMapConfig<sup>12+</sup>
568
569路由配置信息。
570
571**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
572
573**系统能力:** SystemCapability.ArkUI.ArkUI.Full
574
575| 名称   | 类型   |必填 | 说明 |
576| ----  | ---   | ---- |----- |
577| name  | string | 是 | 页面名称。|
578| pageSourceFile| string | 是 | 页面在当前包中的路径。|
579| data | Object | 是 | 页面自定义字段信息。|
580
581## NestedScrollInfo<sup>14+</sup>
582
583嵌套可滚动容器组件信息
584
585**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。
586
587**系统能力:** SystemCapability.ArkUI.ArkUI.Full
588
589| 名称   | 类型   |必填 | 说明 |
590| ----  | ---   | ---- |----- |
591| parent | [Scroller](./ts-container-scroll.md#scroller) | 是 | 可滚动容器组件的控制器。 |
592| child | [Scroller](./ts-container-scroll.md#scroller) | 是 | 可滚动容器组件的控制器,child对应的组件需要是parent对应组件的子组件,且组件间存在嵌套滚动关系。|
593
594### NavDestinationActiveReason<sup>17+</sup>
595
596NavDestination激活态或者非激活态变化的原因。
597
598**原子化服务API:** 从API version 17开始,该接口支持在原子化服务中使用。
599
600**系统能力:** SystemCapability.ArkUI.ArkUI.Full
601
602| 名称   | 值 | 说明                                     |
603| ---- | -- | ---------------------------------------- |
604| TRANSITION | 0   | 通过页面跳转的方式使NavDestination激活态发生变化。                       |
605| CONTENT_COVER | 1   | 通过全模态的开启和关闭使NavDestination激活态发生变化。  |
606| SHEET | 2   | 通过半模态的开启或关闭使NavDestination激活态发生变化。 |
607| DIALOG | 3   | 通过自定义Dialog开启或关闭使NavDestination激活态发生变化。 |
608| OVERLAY | 4   | 通过OverlayManager开启或者关闭Overlay使NavDestination激活态发生变化。|
609| APP_STATE | 5   | 通过前后台切换使NavDestination激活态发生变化。 |
610
611## NavDestinationTransition<sup>15+</sup>
612
613NavDestination自定义动画接口。
614
615**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
616
617**系统能力:** SystemCapability.ArkUI.ArkUI.Full
618
619| 名称   | 类型   |必填 | 说明 |
620| ----  | ---   | ---- |----- |
621| onTransitionEnd | Callback\<void> | 否 | 转场动画结束时的回调函数。 |
622| duration | number | 否 | 转场动画的持续时间,默认值为1000(毫秒)。 |
623| curve | [Curve](ts-appendix-enums.md#curve) | 否 | 动画的曲线类型,默认值为[Curve.EaseInOut](ts-appendix-enums.md#curve)。 |
624| delay | number | 否 | 转场动画的延迟。默认值为0(毫秒)。 |
625| event | Callback\<void> | 是 | 指定转场动效的闭包函数,系统会根据闭包中对组件UI状态的修改,生成对应的过渡动画。参见[animateTo](../js-apis-arkui-UIContext.md#animateto)中的event。 |
626
627## NavDestinationTransitionDelegate<sup>15+</sup>
628
629type NavDestinationTransitionDelegate = (operation: NavigationOperation, isEnter: boolean) => Array\<NavDestinationTransition> | undefined
630
631NavDestination自定义转场动画的代理函数。
632
633**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
634
635**系统能力:** SystemCapability.ArkUI.ArkUI.Full
636
637**参数:**
638
639| 参数名  | 类型     | 必填 | 说明                    |
640|------|--------|----|-----------------------|
641| operation | [NavigationOperation](ts-basic-components-navigation.md#navigationoperation11枚举说明) | 是  | 当前页面转场的操作类型。 |
642| isEnter | boolean | 是  | 当前页面是否为入场页面。<br/>true:&nbsp;当前页面是入场页面。<br/>false:&nbsp;当前页面不是入场页面。 |
643
644**返回值:**
645
646| 类型      | 说明        |
647|---------|-----------|
648| Array<[NavDestinationTransition](#navdestinationtransition15)> \| undefined | NavDestination页面的自定义动画集合。如果返回undefined则做系统默认动画。 |
649
650## 示例
651
652### 示例1(标题栏工具栏与可滚动类组件联动)
653
654以下示例主要演示NavDestination绑定可滚动容器组件来实现滚动内容时触发标题栏和工具栏显示隐藏的效果。
655
656```ts
657import { SymbolGlyphModifier } from '@kit.ArkUI';
658
659@Component
660struct MyPageOne {
661  private listScroller: Scroller = new Scroller();
662  private scrollScroller: Scroller = new Scroller();
663  private arr: number[] = [];
664
665  aboutToAppear(): void {
666    for (let i = 0; i < 30; i++) {
667      this.arr.push(i);
668    }
669  }
670
671  build() {
672    NavDestination() {
673      Scroll(this.scrollScroller) {
674        Column() {
675          List({ space: 0, initialIndex: 0, scroller: this.listScroller }) {
676            ForEach(this.arr, (item: number, index: number) => {
677              ListItem() {
678                Text('' + item)
679                  .height(100)
680                  .fontSize(16)
681                  .textAlign(TextAlign.Center)
682                  .width('90%')
683                  .margin({ left: '5%' })
684                  .borderRadius(10)
685                  .backgroundColor(Color.Gray)
686              }
687            }, (item: string) => item);
688          }.width('100%').height('80%').scrollBar(BarState.Off)
689          .nestedScroll({ scrollForward: NestedScrollMode.SELF_FIRST, scrollBackward: NestedScrollMode.SELF_FIRST })
690
691          ForEach(this.arr, (item: number, index: number) => {
692            ListItem() {
693              Text('' + item)
694                .height(100)
695                .fontSize(16)
696                .textAlign(TextAlign.Center)
697                .width('90%')
698                .margin({ top: '5%' })
699                .borderRadius(10)
700                .backgroundColor(Color.Pink)
701            }
702          }, (item: string) => item);
703        }
704      }
705      .width('100%')
706      .scrollBar(BarState.Off)
707      .scrollable(ScrollDirection.Vertical)
708      .edgeEffect(EdgeEffect.Spring)
709    }
710    .title('PageOne', { backgroundColor: Color.Yellow, barStyle: BarStyle.STACK })
711    .toolbarConfiguration([
712      {
713        value: 'item1',
714        symbolIcon: new SymbolGlyphModifier($r('sys.symbol.phone_badge_star'))
715      }
716    ], { backgroundColor: Color.Orange, barStyle: BarStyle.STACK })
717    // 绑定有父子关系的可滚动容器组件
718    .bindToNestedScrollable([{ parent: this.scrollScroller, child: this.listScroller }])
719  }
720}
721
722@Component
723struct MyPageTwo {
724  private listScroller: Scroller = new Scroller();
725  private arr: number[] = [];
726
727  aboutToAppear(): void {
728    for (let i = 0; i < 30; i++) {
729      this.arr.push(i);
730    }
731  }
732
733  build() {
734    NavDestination() {
735      List({ scroller: this.listScroller }) {
736        ForEach(this.arr, (item: number, index: number) => {
737          ListItem() {
738            Text('' + item)
739              .height(100)
740              .fontSize(16)
741              .textAlign(TextAlign.Center)
742              .width('90%')
743              .margin({ left: '5%' })
744              .borderRadius(10)
745              .backgroundColor(Color.Gray)
746          }
747        }, (item: string) => item);
748      }.width('100%')
749    }
750    .title('PageTwo', { backgroundColor: Color.Yellow, barStyle: BarStyle.STACK })
751    .toolbarConfiguration([
752      {
753        value: 'item1',
754        symbolIcon: new SymbolGlyphModifier($r('sys.symbol.phone_badge_star'))
755      }
756    ], { backgroundColor: Color.Orange, barStyle: BarStyle.STACK })
757    // 绑定可滚动容器组件
758    .bindToScrollable([this.listScroller])
759  }
760}
761
762@Entry
763@Component
764struct Index {
765  private stack: NavPathStack = new NavPathStack();
766
767  @Builder
768  MyPageMap(name: string) {
769    if (name === 'myPageOne') {
770      MyPageOne()
771    } else {
772      MyPageTwo()
773    }
774  }
775
776  build() {
777    Navigation(this.stack) {
778      Column() {
779        Button('push PageOne').onClick(() => {
780          this.stack.pushPath({ name: 'myPageOne' })
781        })
782        Button('push PageTwo').onClick(() => {
783          this.stack.pushPath({ name: 'myPageTwo' })
784        })
785      }.height('40%').justifyContent(FlexAlign.SpaceAround)
786    }.width('100%')
787    .height('100%')
788    .title({ main: 'MainTitle', sub: 'subTitle' })
789    .navDestination(this.MyPageMap)
790  }
791}
792```
793![navdestination_bind_scrollable](figures/navdestination_bind_scrollable.gif)
794
795### 示例2(设置NavDestination自定义转场)
796
797以下示例主要演示NavDestination设置自定义转场动画属性[customTransition](#customtransition15)的效果。
798
799```ts
800@Entry
801@Component
802struct NavDestinationCustomTransition {
803  stack: NavPathStack = new NavPathStack()
804
805  @Builder
806  pageMap(name: string) {
807    if (name) {
808      NavDest()
809    }
810  }
811
812  aboutToAppear(): void {
813    this.stack.pushPath({name: 'dest0'})
814  }
815
816  build() {
817    Navigation(this.stack) {
818      // empty
819    }
820    .navDestination(this.pageMap)
821    .hideNavBar(true)
822    .title('Main Page')
823    .titleMode(NavigationTitleMode.Mini)
824  }
825}
826
827declare type voidFunc = () => void;
828
829@Component
830struct NavDest {
831  @State name: string = 'NA'
832  @State destWidth: string = '100%'
833  stack: NavPathStack = new NavPathStack()
834  @State y: string = '0';
835
836  build() {
837    NavDestination() {
838      Column() {
839        Button('push next page', { stateEffect: true, type: ButtonType.Capsule })
840          .width('80%')
841          .height(40)
842          .margin(20)
843          .onClick(() => {
844            this.stack.pushPath({ name: this.name == 'PageOne' ? "PageTwo" : "PageOne" })
845          })
846      }
847      .size({ width: '100%', height: '100%' })
848    }
849    .title(this.name)
850    .translate({ y: this.y })
851    .onReady((context) => {
852      this.name = context.pathInfo.name;
853      this.stack = context.pathStack;
854    })
855    .backgroundColor(this.name == 'PageOne' ? '#F1F3F5' : '#ff11dee5')
856    .customTransition(
857      (op: NavigationOperation, isEnter: boolean)
858        : Array<NavDestinationTransition> | undefined => {
859        console.log('[NavDestinationTransition]', 'reached delegate in frontend, op: ' + op + ', isEnter: ' + isEnter);
860
861        let transitionOneEvent: voidFunc = () => { console.log('[NavDestinationTransition]', 'reached transitionOne, empty now!'); }
862        let transitionOneFinishEvent: voidFunc = () => { console.log('[NavDestinationTransition]', 'reached transitionOneFinish, empty now!'); }
863        let transitionOneDuration: number = 500;
864        if (op === NavigationOperation.PUSH) {
865          if (isEnter) {
866            // ENTER_PUSH
867            this.y = '100%';
868            transitionOneEvent = () => {
869              console.log('[NavDestinationTransition]', 'transitionOne, push & isEnter');
870              this.y = '0';
871            }
872          } else {
873            // EXIT_PUSH
874            this.y = '0';
875            transitionOneEvent = () => {
876              console.log('[NavDestinationTransition]', 'transitionOne, push & !isEnter');
877              this.y = '0';
878            }
879            transitionOneDuration = 450
880          }
881        } else if (op === NavigationOperation.POP) {
882          if (isEnter) {
883            // ENTER_POP
884            this.y = '0';
885            transitionOneEvent = () => {
886              console.log('[NavDestinationTransition]', 'transitionOne, pop & isEnter');
887              this.y = '0';
888            }
889          } else {
890            // EXIT_POP
891            this.y = '0';
892            transitionOneEvent = () => {
893              console.log('[NavDestinationTransition]', 'transitionOne, pop & !isEnter');
894              this.y = '100%';
895            }
896          }
897        } else {
898          console.log('[NavDestinationTransition]', '----- NOT-IMPL BRANCH of NAV-DESTINATION CUSTOM TRANSITION -----');
899        }
900
901        let transitionOne: NavDestinationTransition = {
902          duration: transitionOneDuration,
903          delay: 0,
904          curve: Curve.Friction,
905          event: transitionOneEvent,
906          onTransitionEnd: transitionOneFinishEvent
907        };
908
909        let transitionTwoEvent: voidFunc = () => { console.log('[NavDestinationTransition]', 'reached transitionTwo, empty now!'); }
910        let transitionTwo: NavDestinationTransition = {
911          duration: 1000,
912          delay: 0,
913          curve: Curve.EaseInOut,
914          event: transitionTwoEvent,
915          onTransitionEnd: () => { console.log('[NavDestinationTransition]', 'reached Two\'s finish'); }
916        };
917
918        return [
919          transitionOne,
920          transitionTwo,
921        ];
922      })
923  }
924}
925```
926![navdestination_custom_transition](figures/navdestination_custom_transition.gif)
927
928### 示例3(设置指定的NavDestination系统转场)
929
930以下示例主要演示NavDestination设置系统转场动画[systemTransition](#systemtransition14)为Fade、Explode、SlideBottom与SlideRight时的转场效果。
931
932```ts
933@Entry
934@Component
935struct NavDestinationSystemTransition {
936  @Provide stack: NavPathStack = new NavPathStack()
937  @Provide homePageTransitionType: NavigationSystemTransitionType = NavigationSystemTransitionType.DEFAULT;
938
939  @Builder
940  pageMap(name: string) {
941    if (name === 'Fade') {
942      Fade()
943    } else if (name === 'Explode') {
944      Explode()
945    } else if (name === 'SlideRight') {
946      SlideRight()
947    } else if (name === 'SlideBottom') {
948      SlideBottom()
949    } else {
950      Dest()
951    }
952  }
953
954  aboutToAppear(): void {
955    this.stack.pushPath({name: 'Dest'})
956  }
957
958  build() {
959    Navigation(this.stack) {
960      // empty
961    }
962    .navDestination(this.pageMap)
963    .hideNavBar(true)
964  }
965}
966
967@Component
968struct Dest {
969  @Consume stack: NavPathStack;
970  @Consume homePageTransitionType: NavigationSystemTransitionType;
971  @State name: string = 'NA';
972
973  build() {
974    NavDestination() {
975      HomeBody()
976    }
977    .title('Navigation System Animation')
978    .onReady((context) => {
979      this.name = context.pathInfo.name
980    })
981    .systemTransition(this.homePageTransitionType)
982  }
983}
984
985@Component
986struct Fade {
987  @Consume stack: NavPathStack;
988  @State name: string = 'NA';
989
990  build() {
991    NavDestination() {
992      DestBody({
993        name: this.name
994      })
995    }
996    .title(this.name)
997    .onReady((context) => {
998      this.name = context.pathInfo.name
999    })
1000    .systemTransition(NavigationSystemTransitionType.FADE)
1001  }
1002}
1003
1004@Component
1005struct Explode {
1006  @Consume stack: NavPathStack;
1007  @State name: string = 'NA';
1008
1009  build() {
1010    NavDestination() {
1011      DestBody({
1012        name: this.name
1013      })
1014    }
1015    .title(this.name)
1016    .onReady((context) => {
1017      this.name = context.pathInfo.name
1018    })
1019    .systemTransition(NavigationSystemTransitionType.EXPLODE)
1020  }
1021}
1022
1023@Component
1024struct SlideRight {
1025  @Consume stack: NavPathStack;
1026  @State name: string = 'NA';
1027
1028  build() {
1029    NavDestination() {
1030      DestBody({
1031        name: this.name
1032      })
1033    }
1034    .title(this.name)
1035    .onReady((context) => {
1036      this.name = context.pathInfo.name
1037    })
1038    .systemTransition(NavigationSystemTransitionType.SLIDE_RIGHT)
1039  }
1040}
1041
1042@Component
1043struct SlideBottom {
1044  @Consume stack: NavPathStack;
1045  @State name: string = 'NA';
1046
1047  build() {
1048    NavDestination() {
1049      DestBody({
1050        name: this.name
1051      })
1052    }
1053    .title(this.name)
1054    .onReady((context) => {
1055      this.name = context.pathInfo.name
1056    })
1057    .systemTransition(NavigationSystemTransitionType.SLIDE_BOTTOM)
1058  }
1059}
1060
1061@Component
1062struct DestBody {
1063  name: string = 'NA'
1064
1065  columnTextSize: number = 22
1066  columnTextFontWeight: FontWeight = FontWeight.Bolder
1067  columnWidth: string = '65%'
1068  columnPadding: number = 22
1069  columnMargin: number = 10
1070  columnBorderRadius: number = 10
1071
1072  build() {
1073    Column() {
1074      Column()
1075        .width('85')
1076        .height(50)
1077        .backgroundColor(Color.White)
1078      Column() {
1079        Text(this.name)
1080          .fontSize(this.columnTextSize)
1081          .fontWeight(this.columnTextFontWeight)
1082      }
1083      .width(this.columnWidth)
1084      .padding(this.columnPadding)
1085      .margin(this.columnMargin)
1086      .borderRadius(this.columnBorderRadius)
1087      .shadow(ShadowStyle.OUTER_DEFAULT_LG)
1088    }
1089  }
1090}
1091
1092@Component
1093struct HomeBody {
1094  @Consume stack: NavPathStack;
1095  @Consume homePageTransitionType: NavigationSystemTransitionType;
1096
1097  columnTextSize: number = 22
1098  columnTextFontWeight: FontWeight = FontWeight.Bolder
1099  columnWidth: string = '85%'
1100  columnPadding: number = 22
1101  columnMargin: number = 10
1102  columnBorderRadius: number = 10
1103  columnShadow: ShadowStyle = ShadowStyle.OUTER_DEFAULT_MD
1104
1105  build() {
1106    Column() {
1107      Search({ value: 'Search' })
1108        .width(this.columnWidth)
1109
1110      Column() {
1111        Text('fade')
1112          .fontSize(this.columnTextSize)
1113          .fontWeight(this.columnTextFontWeight)
1114      }
1115      .width(this.columnWidth)
1116      .padding(this.columnPadding)
1117      .margin(this.columnMargin)
1118      .borderRadius(this.columnBorderRadius)
1119      .shadow(this.columnShadow)
1120      .onClick(() => {
1121        this.homePageTransitionType = NavigationSystemTransitionType.FADE
1122        this.stack.pushPath({name: 'Fade'})
1123      })
1124
1125      Column() {
1126        Text('explode')
1127          .fontSize(this.columnTextSize)
1128          .fontWeight(this.columnTextFontWeight)
1129      }
1130      .width(this.columnWidth)
1131      .padding(this.columnPadding)
1132      .margin(this.columnMargin)
1133      .borderRadius(this.columnBorderRadius)
1134      .shadow(this.columnShadow)
1135      .onClick(() => {
1136        this.homePageTransitionType = NavigationSystemTransitionType.EXPLODE
1137        this.stack.pushPath({name: 'Explode'})
1138      })
1139
1140      Column() {
1141        Text('slide right')
1142          .fontSize(this.columnTextSize)
1143          .fontWeight(this.columnTextFontWeight)
1144      }
1145      .width(this.columnWidth)
1146      .padding(this.columnPadding)
1147      .margin(this.columnMargin)
1148      .borderRadius(this.columnBorderRadius)
1149      .shadow(this.columnShadow)
1150      .onClick(() => {
1151        this.homePageTransitionType = NavigationSystemTransitionType.SLIDE_RIGHT
1152        this.stack.pushPath({name: 'SlideRight'})
1153      })
1154
1155      Column() {
1156        Text('slide bottom')
1157          .fontSize(this.columnTextSize)
1158          .fontWeight(this.columnTextFontWeight)
1159      }
1160      .width(this.columnWidth)
1161      .padding(this.columnPadding)
1162      .margin(this.columnMargin)
1163      .borderRadius(this.columnBorderRadius)
1164      .shadow(this.columnShadow)
1165      .onClick(() => {
1166        this.homePageTransitionType = NavigationSystemTransitionType.SLIDE_BOTTOM
1167        this.stack.pushPath({name: 'SlideBottom'})
1168      })
1169    }
1170  }
1171}
1172```
1173![navdestination_fade](figures/navdestination_fade_transition.gif)
1174![navdestination_explode](figures/navdestination_explode_transition.gif)
1175![navdestination_slide_bottom](figures/navdestination_slide_bottom_transition.gif)
1176![navdestination_slide_right](figures/navdestination_slide_right_transition.gif)
1177
1178NavDestination其他用法可参考[Navigation示例](ts-basic-components-navigation.md#示例)。
1179