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