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![](figures/AtomicServiceNavigationDemo01.png)