Navigation組件是路由導(dǎo)航的根視圖容器,一般作為Page頁面的根容器使用,其內(nèi)部默認包含了標(biāo)題欄,內(nèi)容欄和公工具欄,其中內(nèi)容區(qū)默認首頁顯示導(dǎo)航內(nèi)容(Navigation的子組件)或非首頁顯示(NavDestination的子組件),首頁和非首頁通過路由進行切換 * 使用Navigation跳轉(zhuǎn)的組件不需要再使用Entry來修飾,普通組件即可 * Navigation是一個導(dǎo)航組件,API9和API11的使用官方推薦方式各不相同 ## 1. Navagation API9的用法-(Navigation-NavRouter-(其他組件+NavD" />

一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

harmony OS NEXT-Navagation基本用法

程奕紅 ? 來源:jf_34770892 ? 作者:jf_34770892 ? 2025-04-27 17:39 ? 次閱讀

# Navagation基本用法

> Navigation組件是路由導(dǎo)航的根視圖容器,一般作為Page頁面的根容器使用,其內(nèi)部默認包含了標(biāo)題欄,內(nèi)容欄和公工具欄,其中內(nèi)容區(qū)默認首頁顯示導(dǎo)航內(nèi)容(Navigation的子組件)或非首頁顯示(NavDestination的子組件),首頁和非首頁通過路由進行切換

* 使用Navigation跳轉(zhuǎn)的組件不需要再使用Entry來修飾,普通組件即可
* Navigation是一個導(dǎo)航組件,API9和API11的使用官方推薦方式各不相同

## 1. Navagation API9的用法-(Navigation-NavRouter-(其他組件+NavDestination的用法))

### 1. 1**導(dǎo)航組件層次關(guān)系**

| 組件 | 作用 | 層級規(guī)則 |
| ---------------- | ------------------------ | ------------------------- |
| `Navigation` | 管理所有導(dǎo)航頁面的根容器 | 必須包含多個 `NavRouter` |
| `NavRouter` | 定義一個跳轉(zhuǎn)入口 | 必須配對 `NavDestination` |
| `NavDestination` | 目標(biāo)頁面內(nèi)容 | |

### **1. **2 按鈕覆蓋問題

- **代碼現(xiàn)象**:`跳轉(zhuǎn)B` 覆蓋 `跳轉(zhuǎn)A`
- **根本原因**:
在 `NavRouter` 內(nèi)部放置多個直接同級組件時,僅最后一個組件會被渲染。
- **ArkUI規(guī)則**:
一個 `NavRouter` 只能關(guān)聯(lián) **一個觸發(fā)元素** (如Button),如需多個跳轉(zhuǎn)需使用多個 `NavRouter`。

### 1.3 代碼案例

```ts
@Entry
@Component
struct TestNavgationAPI9 {
build() {

Navigation() {
// --------------------- 第一跳轉(zhuǎn)入口 ---------------------
NavRouter() { // ? 觸發(fā)元素
Button('跳轉(zhuǎn)A')
Button('跳轉(zhuǎn)B') //放置的第二個界面會覆蓋第一個
//要跳轉(zhuǎn)的界面
NavDestination() { // ? 目標(biāo)頁面A
Image($r('app.media.Coverpeople'))
.width(50)
.aspectRatio(1)
// --------------------- 第二跳轉(zhuǎn)入口 ---------------------
NavRouter() { // ? 觸發(fā)元素
//第一個組件就是跳轉(zhuǎn)的
// --------------------- 第二跳轉(zhuǎn)入口 ---------------------
Text('我跳轉(zhuǎn)啦') // ? 目標(biāo)頁面B
NavDestination() {
Text('第三個界面') // ? 目標(biāo)頁面C
}

}

}

}

}
.height('100%')
.width('100%')
}
}
```

### 1.4 效果展示

![img](https://i-blog.csdnimg.cn/img_convert/12e9122e57792c20b964b380f7738217.gif)

## 2.Navagation 10的用法

### 2.1 路由棧自主管理

- `NavPathStack`

核心方法:

```ts
pushPath() // 壓入新頁面(保留前頁)
replacePath() // 替換當(dāng)前頁面(銷毀前頁)
pop() // 回到上一頁
```

### 2.2 頁面加載控制

- **`navDestination(builder)`**
通過 `Builder` 函數(shù)動態(tài)渲染路由目標(biāo):

* 函數(shù)動態(tài)渲染路由目標(biāo):

```ts
.navDestination(this.navDesBuilder) // 動態(tài)路由映射
```

```ts
@Builder
navDesBuilder(name: string) {
if (name === "pageTwo") {
NavgationChild02() // 根據(jù) name 組裝對應(yīng)頁面
}
}
```

### 2.3 跨組件通信

- `@Provide` 與 `@Consume` 裝飾器

```ts
// 父級定義提供值
@Provide navPathStack: NavPathStack = new NavPathStack()
// 子組件自動獲取
@Consume navPathStack: NavPathStack
```

無需顯式傳遞,自動向下注入。

### 2.4 實現(xiàn)步驟

#### 1. 自己管理頁面棧 創(chuàng)建一個頁面棧 (用@Provide修飾,方便跨組件使用)

```ts
@Provide
navPathStack: NavPathStack = new NavPathStack()
```

#### 2.將創(chuàng)建的頁面棧實例傳遞給主界面

* `ps`:這一步還是蠻關(guān)鍵的,很多頁面不展示就是這個原因

```ts
Navigation(this.navPathStack) {
Text('這是第一頁-首頁')
Button('去下一頁')
.onClick(() => {
this.navPathStack.pushPath({
name: 'pageOne'
})
})

}
.height('100%')
.width('100%')
```

#### 3.通過 `Builder` 函數(shù)動態(tài)渲染路由目標(biāo)

##### 1. 先創(chuàng)建一個自定義Builder

```ts
@Builder
myNavPathStackBuilder(name: string) {
//根據(jù)傳入的名字區(qū)渲染對應(yīng)的頁面
if (name === 'pageOne') {
Children01()

} else if (name === 'pageTwo') {
Children02()

} else if (name === 'pageThree') {
Children03()

}
}

```

##### 2. 傳入Builder

```ts
.navDestination(this.navDesBuilder)
```

* 不需要加括號,這里有個底層原因

1. **ArkUI 的 `navDestination` 機制**

- **設(shè)計邏輯**:框架需要在導(dǎo)航時動態(tài)調(diào)用構(gòu)建函數(shù)生成頁面。若傳遞this.navDesBuilder()則:
- 代碼執(zhí)行時**立即運行該函數(shù)**(而非按需調(diào)用)
- 返回結(jié)果可能為 `void` 或非組件類型,導(dǎo)致**渲染異常**。

2. **`@Builder` 函數(shù)的特性**

- **延遲執(zhí)行**:`@Builder` 定義的 UI 編譯時會轉(zhuǎn)為**獨立閉包代碼塊**

- **調(diào)用時機**:由 導(dǎo)航框架 在需要時(如`pushPath`)根據(jù)name參數(shù)觸發(fā)構(gòu)建

```ts
this.navPathStack.pushPath({ name: 'pageTwo' });
// ?? 此時 ArkUI 內(nèi)部通過 `.navDestination` 關(guān)聯(lián)的 Builder 按需執(zhí)行
```

##### 3.跳轉(zhuǎn)的實現(xiàn)

1. 通過點擊事件調(diào)用當(dāng)前`navPathStack`實例`pushPath`方法
2. 傳入你要跳轉(zhuǎn)頁面的名字,進行跳轉(zhuǎn)

```ts
Button('去下一頁')
.onClick(() => {
this.navPathStack.pushPath({
name: 'pageOne'
})
})
```

#### 4.子界面的定義

```ts
@Component
struct Children01 {
//接收主界面?zhèn)鬟f過來的頁面棧
@Consume navPathStack: NavPathStack
build() {
NavDestination() {
Column({ space: 5 }) {
Text('這是我從主頁跳轉(zhuǎn)的第一個界面')
.fontSize(24)
.fontWeight(500)
Button('跳轉(zhuǎn)到第二個頁面去')
.onClick(() => {
this.navPathStack.pushPath({
name: 'pageTwo'
})
})
}
}

}
}
@Component
struct Children02 {
@Consume
navPathStack: NavPathStack

build() {
NavDestination() {
Column({ space: 5 }) {
Text('這是我從主頁跳轉(zhuǎn)的第二個界面')
.fontSize(24)
.fontWeight(500)
Button('跳轉(zhuǎn)到第三個頁面去')
.onClick(() => {
this.navPathStack.pushPath({
name: 'pageThree'
})
})
}
}

}
}

@Component
struct Children03 {
@Consume
navPathStack: NavPathStack

build() {
NavDestination() {
Column() {
Text('這是我從主頁跳轉(zhuǎn)的第三個界面')
.fontSize(24)
.fontWeight(500)
}

}

}
}
```

#### 5.效果展示

![img](https://i-blog.csdnimg.cn/img_convert/c89db8497ba6b691ab97c23274b75b86.gif)

## 3.NavagationAPI10使用的補充內(nèi)容

### 3.1 常見的API

| 配置組合 | 代碼示例 | 效果描述 |
| ----------------- | ------------------------------------------------------------ | ----------------------------------- |
| 默認狀態(tài) | `Navigation() .title('主標(biāo)題')` | 標(biāo)題欄顯示 "主標(biāo)題",采用 Free 模式 |
| 精簡模式+隱藏標(biāo)題 | `Navigation() .titleMode(NavigationTitleMode.Mini) .hideTitleBar(true)` | 標(biāo)題欄完全不可見 |
| 子頁面獨立配置 | `NavDestination() .title('子頁標(biāo)題') .hideTitleBar(true)` | |

### 3.2 傳參獲取參數(shù)的實現(xiàn)

#### 1.定義數(shù)據(jù)結(jié)構(gòu)

```ts
interface hobby {
name: string,
hobby: string
}
```

#### 2.即將跳轉(zhuǎn)頁面?zhèn)魅雲(yún)?shù)

```ts
NavDestination() {
Column({ space: 5 }) {
Text('這是我從主頁跳轉(zhuǎn)的第二個界面')
.fontSize(24)
.fontWeight(500)
Button('跳轉(zhuǎn)到第三個頁面去')
.onClick(() => {
this.navPathStack.pushPath({
name: 'pageThree',
param: { name: '貓貓球', hobby: '喜歡玩毛線球' } as hobby
})
})
}
}
```

#### 3.跳轉(zhuǎn)的頁面接收數(shù)據(jù)

```ts
@Component
struct Children03 {
@State
hobby: hobby[] = [] as hobby[]
@Consume
navPathStack: NavPathStack

aboutToAppear(): void {
this.hobby = this.navPathStack.getParamByName('pageThree') as hobby[]
promptAction.showToast({
message: JSON.stringify(this.hobby)
})
}

build() {
NavDestination() {
Column() {
Text('這是我從主頁跳轉(zhuǎn)的第三個界面')
Text('這是我獲取的數(shù)據(jù)')
Text(this.hobby[0].name)
Text(this.hobby[0].hobby)
.fontWeight(500)
}

}

}
}
```

#### 4.效果展示

![](https://i-blog.csdnimg.cn/img_convert/8e8ebf86b7a5ad5aae287b9cc6bf19e0.gif)


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Harmony
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    2852
收藏 人收藏

    評論

    相關(guān)推薦

    harmony OS NEXT-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹

    # 鴻蒙Harmony-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹 ## 1.1 雙向數(shù)據(jù)綁定概念 在鴻蒙(HarmonyOS)應(yīng)用開發(fā)中,雙向數(shù)據(jù)改變(或雙向數(shù)據(jù)綁定)是一種讓數(shù)據(jù)·模型和UI組件之間
    的頭像 發(fā)表于 04-29 16:52 ?93次閱讀

    harmony OS NEXT-通過用戶首選項實現(xiàn)數(shù)據(jù)持久化

    # 鴻蒙通過用戶首選項實現(xiàn)數(shù)據(jù)持久化 ## 1.1 場景介紹 用戶首選項為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級數(shù)據(jù),并對其修改和查詢。當(dāng)用戶希望有一個全局唯一存儲的地方,可以采用用戶首選項來進行存儲。Preferences會將該數(shù)據(jù)緩存在內(nèi)存中,當(dāng)用戶讀取的時候,能夠快速從內(nèi)存中獲取數(shù)據(jù),當(dāng)需要持久化時可以使用flush接口將內(nèi)存中的數(shù)據(jù)寫入持久化文件中。Preferences會隨著存放的數(shù)據(jù)量越多而導(dǎo)致應(yīng)用占用的內(nèi)存越大,因此
    的頭像 發(fā)表于 04-29 16:38 ?99次閱讀

    harmony OS NEXT-評論功能小demo

    # 評論頁面小demo ## 效果展示 ![img](https://i-blog.csdnimg.cn/img_convert/f574e0b18325ee466938a3cb70530209.gif) ## 1.拆解組件,分層搭建 我們將整個評論頁面拆解為三個組件,分別是頭部導(dǎo)航,評論項,回復(fù)三個部分,然后統(tǒng)一在index界面導(dǎo)入 ![image-20250304150652225](https://i-blog.csdnimg.cn/img_convert/2e234f0fe986014368d8d7f138577e6a.png) ## 2.頭部導(dǎo)航界面搭建 ![image-20250304151026576](https://i-blog.csdnimg.cn/img_convert/c876aa04a505a3c3203c03984a2e1504.png) ```ts @Preview @Component struct HmNavBar { ?// 屬性:是可以被傳
    的頭像 發(fā)表于 04-27 17:38 ?67次閱讀

    單模光纖os1和os2的區(qū)別分析

    單模光纖OS1和OS2的主要區(qū)別體現(xiàn)在標(biāo)準(zhǔn)定義、傳輸性能、應(yīng)用場景及成本等方面,以下是具體分析: 1. 標(biāo)準(zhǔn)定義 OS1:符合ITU-T G.652.A和G.652.B標(biāo)準(zhǔn),屬于常規(guī)單模光纖
    的頭像 發(fā)表于 04-21 10:37 ?132次閱讀

    HarmonyOS Next V2 @Local 和@Param

    HarmonyOS Next V2 @Local 和@Param @Local 背景 @Local 是 harmony 應(yīng)用開發(fā)中的 v2 版本中 對標(biāo)**@State**的狀態(tài)管理修飾器,它解決了
    的頭像 發(fā)表于 04-02 18:27 ?204次閱讀
    HarmonyOS <b class='flag-5'>Next</b> V2 @Local 和@Param

    harmony OS NEXT-基本介紹及DevcoStudiop基本使用

    #鴻蒙基本介紹及DevcoStudiop基本使用 1.認識DevcoStudiop工作區(qū) 1.1認識工作區(qū) 開發(fā)節(jié)奏: 通過左側(cè)目錄找到對應(yīng)的應(yīng)用文件,在編輯區(qū)進行代碼編寫,在右側(cè)看預(yù)覽效果 快捷鍵:連按兩下shift快速尋找全局內(nèi)容,如文件 1.2如何排錯 寫代碼時,我們經(jīng)常會遇到這種情況,右側(cè)出現(xiàn)不能開啟預(yù)覽器的提示,我們需要打開預(yù)覽器日志查看報錯 第一種方法 第二種方法 第三種方法:通過統(tǒng)一構(gòu)建,暴露哪些文件及代碼無法編譯通過 1.3如何刷新看效果 預(yù)覽器是有熱
    的頭像 發(fā)表于 03-26 16:48 ?255次閱讀
    <b class='flag-5'>harmony</b> <b class='flag-5'>OS</b> <b class='flag-5'>NEXT</b>-基本介紹及DevcoStudiop基本使用

    施耐德Harmony Relay電磁式繼電器產(chǎn)品目錄

    電子發(fā)燒友網(wǎng)站提供《施耐德Harmony Relay電磁式繼電器產(chǎn)品目錄.pdf》資料免費下載
    發(fā)表于 03-11 15:38 ?0次下載

    華為鴻蒙NEXT系統(tǒng)的優(yōu)勢與劣勢

    隨著華為鴻蒙NEXT系統(tǒng)的推出,關(guān)于其性能與體驗的討論在網(wǎng)絡(luò)上引起了廣泛關(guān)注。本文綜合了多個角度的用戶評價,從優(yōu)勢與劣勢兩方面,帶您了解這一備受矚目的操作系統(tǒng)。
    的頭像 發(fā)表于 12-30 10:30 ?3819次閱讀

    HarmonyOS Next MQTT演示

    HarmonyOS Next MQTT演示
    發(fā)表于 11-07 16:54

    華為HarmonyOS NEXT 10月8日開啟公測

    華為宣布,萬眾矚目的HarmonyOS NEXT操作系統(tǒng)將于10月8日正式開啟公測,標(biāo)志著這一創(chuàng)新力作即將與廣大用戶見面。HarmonyOS NEXT作為華為自研操作系統(tǒng)的最新成果,不僅全面升級了系統(tǒng)內(nèi)核,實現(xiàn)了跨設(shè)備無縫協(xié)同,更在性能優(yōu)化、流暢度提升上取得了顯著突破。
    的頭像 發(fā)表于 09-24 15:41 ?1187次閱讀
    華為HarmonyOS <b class='flag-5'>NEXT</b> 10月8日開啟公測

    OpenAI宣布啟動GPT Next計劃

     9月4日最新資訊,OpenAI Japan 在KDDI峰會上亮相,揭開了其即將問世的下一代AI模型的神秘面紗,并正式宣布了旨在2024年啟動的GPT Next宏偉計劃。
    的頭像 發(fā)表于 09-04 14:51 ?802次閱讀

    華為發(fā)布鴻蒙原生智能,OS深度融合AI,小藝升級為系統(tǒng)級智能體

    6月21日,華為開發(fā)者大會(HDC 2024)于東莞松山湖舉行,會上,華為發(fā)布鴻蒙原生智能(Harmony Intelligence),并宣布HarmonyOS NEXT面向開發(fā)者和先鋒用戶開放
    的頭像 發(fā)表于 06-24 14:30 ?908次閱讀
    華為發(fā)布鴻蒙原生智能,<b class='flag-5'>OS</b>深度融合AI,小藝升級為系統(tǒng)級智能體

    HDC2024華為發(fā)布鴻蒙原生智能:AI與OS深度融合,開啟全新的AI時代

    6月21日,華為開發(fā)者大會2024(HDC.2024)召開。 HarmonyOS NEXT將AI與OS深度融合,構(gòu)筑全新鴻蒙原生智能框架。大會現(xiàn)場,華為常務(wù)董事、終端BG董事長、智能汽車解決方案BU
    的頭像 發(fā)表于 06-24 09:28 ?969次閱讀
    HDC2024華為發(fā)布鴻蒙原生智能:AI與<b class='flag-5'>OS</b>深度融合,開啟全新的AI時代

    HDC 2024上,HarmonyOS NEXT有哪些精彩亮點值得期待?

    6月21日至6月23日,備受矚目的HDC2024華為開發(fā)者大會將在松山湖盛大舉辦。近日,官方對外發(fā)出了亮點日程海報,圍繞HarmonyOS?NEXT,大會都將帶來哪些精彩內(nèi)容呢?讓我們一探
    的頭像 發(fā)表于 06-19 17:02 ?733次閱讀
    HDC 2024上,HarmonyOS <b class='flag-5'>NEXT</b>有哪些精彩亮點值得期待?

    Flutter首次亮相Google Cloud Next大會

    Flutter 團隊在近期首次參加了 Google Cloud Next 大會,這意味著 Flutter 在開發(fā)社區(qū)中的影響力正在日益增長。
    的頭像 發(fā)表于 05-09 10:15 ?651次閱讀