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