1# AtomicServiceNavigation 2 3作为Page页面的根容器使用,其内部默认包含了标题栏、内容区,其中内容区默认首页显示导航内容或非首页显示([NavDestination](ts-basic-components-navdestination.md)的子组件),首页和非首页通过路由进行切换。 4 5> **说明:** 6> 7> 该组件从API Version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8 9## 子组件 10 11可以包含子组件。 12从API Version 10开始,推荐使用[NavPathStack](ts-basic-components-navigation.md#navpathstack10)进行页面路由。 13## AtomicServiceNavigation 14 15``` 16AtomicServiceNavigation({ 17 navPathStack?: NavPathStack, 18 navigationContent: Callback<void>, 19 title?: ResourceStr, 20 titleBackgroundColor?: ResourceColor, 21 hideTitleBar?: boolean, 22 navBarWidth?: Length, 23 mode?: NavigationMode, 24 navDestinationBuilder?: NavDestinationBuilder, 25 navBarWidthRange?: [Dimension, Dimension], 26 minContentWidth?: Dimension, 27 stateChangeCallback?: Callback<boolean>, 28 modeChangeCallback?: Callback<NavigationMode> 29}) 30``` 31 32**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 33 34**装饰器类型:** @Component 35 36**系统能力:** SystemCapability.ArkUI.ArkUI.Full 37 38**参数**: 39 40| 名称 | 类型 | 必填 | 装饰器类型|描述 | 41| --------------- | ------ | ---- | ----|----------| 42| navPathStack | [NavPathStack](ts-basic-components-navigation.md#navpathstack10) | 否 | @State | 路由栈信息。 | 43| navigationContent | Callback\<void\> | 否 | @BuilderParam | Navigation容器内容。 | 44| title | [ResourceStr](ts-types.md#resourcestr) | 否 |@Prop | 设置页面标题。| 45| titleOptions | [TitleOptions](#titleoptions) | 否 | @Prop | 标题栏选项。| 46| hideTitleBar | boolean | 否 | @Prop | 设置是否隐藏标题栏。| 47| navBarWidth | [Length](ts-types.md#length)| 否 | @Prop | 设置导航栏宽度。<br>仅在Navigation组件分栏时生效。| 48| mode| [NavigationMode](ts-basic-components-navigation.md#navigationmode9枚举说明) | 否 | @Prop |设置导航栏的显示模式。<br>支持Stack、Split与Auto模式。| 49| navDestinationBuilder | [NavDestinationBuilder](#navdestinationbuilder) | 否 | @BuilderParam | 创建[NavDestination](ts-basic-components-navdestination.md)组件所需要的Builder数据。 | 50| navBarWidthRange | [[Dimension](ts-types.md#dimension10), [Dimension](ts-types.md#dimension10)] | 否 | @Prop |设置导航栏最小和最大宽度(双栏模式下生效)。| 51| minContentWidth | [Dimension](ts-types.md#dimension10) | 否 | @Prop | 设置导航栏内容区最小宽度(双栏模式下生效)。| 52| stateChangeCallback | Callback\<boolean\> | 否 | - | 导航栏显示状态切换时触发该回调。| 53| modeChangeCallback | Callback\<[NavigationMode](ts-basic-components-navigation.md#navigationmode9枚举说明)\> | 否 | - | 当Navigation首次显示或者单双栏状态发生变化时触发该回调。| 54 55## TitleOptions 56 57**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 58 59**系统能力:** SystemCapability.ArkUI.ArkUI.Full 60 61| 名称 | 类型 | 必填 | 描述 | 62| --------------- | ------ | ---- | ---------- | 63| backgroundColor | [ResourceColor](ts-types.md#resourcecolor) | 否 | 标题栏背景颜色。 | 64| isBlurEnabled | boolean | 否 | 标题栏是否模糊,默认为true。 | 65| TitleOptions | [BarStyle<sup>12+</sup>](ts-basic-components-navigation.md#barstyle12枚举说明) | 否 | 标题栏样式属性设置。 | 66 67## NavDestinationBuilder 68 69**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 70 71**系统能力:** SystemCapability.ArkUI.ArkUI.Full 72 73| 参数名 | 类型 | 必填 | 描述 | 74| --------------- | ------ | ---- | ---------- | 75| name | string | 是 | [NavDestination](ts-basic-components-navdestination.md)页面名称。 | 76| param | Object | 是 | [NavDestination](ts-basic-components-navdestination.md)页面详细参数。 | 77 78## 示例 79 80```ts 81// Index.ets 82import { AtomicServiceNavigation, NavDestinationBuilder, AtomicServiceTabs, TabBarOptions, TabBarPosition } from '@kit.ArkUI'; 83 84@Entry 85@Component 86struct Index { 87 @State message: string = '主题'; 88 childNavStack: NavPathStack = new NavPathStack(); 89 @Builder 90 tabContent1() { 91 Text('first page') 92 .onClick(() => { 93 this.childNavStack.pushPath({ name: 'page one' }) 94 }) 95 } 96 97 @Builder 98 tabContent2() { 99 Text('second page') 100 } 101 102 @Builder 103 tabContent3() { 104 Text('third page') 105 } 106 107 @Builder 108 navigationContent() { 109 AtomicServiceTabs({ 110 tabContents: [ 111 () => { 112 this.tabContent1() 113 }, 114 () => { 115 this.tabContent2() 116 }, 117 () => { 118 this.tabContent3() 119 } 120 ], 121 tabBarOptionsArray: [ 122 new TabBarOptions($r('sys.media.ohos_ic_public_phone'), '功能1'), 123 new TabBarOptions($r('sys.media.ohos_ic_public_location'), '功能2', Color.Green, Color.Red), 124 new TabBarOptions($r('sys.media.ohos_ic_public_more'), '功能3') 125 ], 126 tabBarPosition: TabBarPosition.BOTTOM, 127 barBackgroundColor: $r('sys.color.ohos_id_color_bottom_tab_bg'), 128 onTabBarClick: (index: Number) => { 129 if (index == 0) { 130 this.message = '功能1'; 131 } else if (index == 1) { 132 this.message = '功能2'; 133 } else { 134 this.message = '功能3'; 135 } 136 } 137 }) 138 } 139 140 @Builder 141 pageMap(name: string) { 142 if (name === 'page one') { 143 PageOne() 144 } else if (name === 'page two') { 145 PageTwo() 146 } 147 } 148 149 build() { 150 Row() { 151 Column() { 152 AtomicServiceNavigation({ 153 navigationContent: () => { 154 this.navigationContent() 155 }, 156 title: this.message, 157 titleOptions: { 158 backgroundColor: 'rgb(61, 157, 180)', 159 isBlurEnabled: false 160 }, 161 navDestinationBuilder: this.pageMap, 162 navPathStack: this.childNavStack, 163 mode: NavigationMode.Stack 164 }) 165 } 166 .width('100%') 167 } 168 .height('100%') 169 } 170} 171 172@Component 173export struct PageOne { 174 pageInfo: NavPathStack = new NavPathStack(); 175 176 build() { 177 NavDestination() { 178 Button('Next') 179 .onClick(() => { 180 this.pageInfo.pushPath({ name: 'page two'}) 181 }) 182 } 183 .title('PageOne') 184 .onReady((context: NavDestinationContext) => { 185 this.pageInfo = context.pathStack; 186 }) 187 } 188} 189 190@Component 191export struct PageTwo { 192 pageInfo: NavPathStack = new NavPathStack(); 193 194 build() { 195 NavDestination() { 196 Button('End') 197 } 198 .title('PageTwo') 199 .onReady((context: NavDestinationContext) => { 200 this.pageInfo = context.pathStack; 201 }) 202 } 203} 204``` 205 206