ZRouter: https://gitee.com/common-apps/ZRouter
一句話總結(jié): 使用簡單,配置麻煩
ZRouter是一款輕量級(jí)且非侵入性的鴻蒙動(dòng)態(tài)路由框架,可解決HAR/HSP業(yè)務(wù)模塊間的耦合與通信問題。主要特性:
簡化Navigation使用,無需關(guān)注路由表的配置,對(duì)Navigation及NavDestination組件保持零侵入;
支持API鏈?zhǔn)秸{(diào)用,讓API更簡潔直觀;
為了進(jìn)一步簡化使用,支持NavDestination頁面模板化,是一個(gè)可選項(xiàng);
注解參數(shù)支持使用靜態(tài)常量,可跨模塊定義;
支持自定義攔截器,可實(shí)現(xiàn)頁面重定向、登錄驗(yàn)證、數(shù)據(jù)預(yù)取、埋點(diǎn)等業(yè)務(wù)場(chǎng)景。
支持服務(wù)路由,可實(shí)現(xiàn)Har/Hsp模塊間的通信;
支持全局及單個(gè)頁面的生命周期函數(shù)管理,可使任意類都能享有與組件相同的生命周期特性,可用于頁面埋點(diǎn)統(tǒng)計(jì)等業(yè)務(wù)場(chǎng)景;
支持跨多級(jí)頁面參數(shù)攜帶返回監(jiān)聽;
支持自定義URL路徑跳轉(zhuǎn),可在攔截器內(nèi)自行解析URL實(shí)現(xiàn)業(yè)務(wù)邏輯;
內(nèi)置多種轉(zhuǎn)場(chǎng)動(dòng)畫效果(平移、旋轉(zhuǎn)、漸變、縮放、高斯模糊、共享一鏡到底動(dòng)畫),并支持自定義動(dòng)畫;
支持啟動(dòng)模式、混淆、嵌套Navigation、Hap;
支持與您現(xiàn)有項(xiàng)目中的Navigation無縫融合,實(shí)現(xiàn)零成本向本庫遷移;
支持ArkUI-X跨平臺(tái)上使用;
支持第三方應(yīng)用Navigation的使用本庫API;
安裝
在項(xiàng)目根目錄的hvigor目錄下的hvigor-config.json5文件中配置安裝

配置
支持配置方式:
- 模塊級(jí)配置:即在每個(gè)需要ZRouter跳轉(zhuǎn)的模塊目錄下的hvigorfile.ts文件中單獨(dú)配置;

// 2、初始化配置
// 1、導(dǎo)入
import { routerRegisterPlugin, PluginConfig } from 'router-register-plugin'
// 2、初始化配置
const config: PluginConfig = {
scanDirs: ['src/main/ets/pages', 'src/main/ets/views'], // 掃描的目錄,如果不設(shè)置,默認(rèn)是掃描src/main/ets目錄
logEnabled: true, // 查看日志
viewNodeInfo: false, // 查看節(jié)點(diǎn)信息
ignoredModules:['RouterApi','common','xxx'], // 忽略的參與構(gòu)建的模塊,根據(jù)自己項(xiàng)目自行設(shè)置
enableUiPreviewBuild: false, // 啟用UI預(yù)覽構(gòu)建,不建議啟動(dòng)
}
export default {
// 3、添加插件
plugins:[routerRegisterPlugin(config)]
}
注意:hvigorfile.ts文件中默認(rèn)配置不要?jiǎng)h除了。
| 參數(shù)名 | 類型 | 默認(rèn)值 | 描述 |
|---|---|---|---|
scanDirs |
string[] | ['src/main/ets'] | 掃描的目錄,如果不設(shè)置,默認(rèn)是掃描src/main/ets目錄。建議配置該字段,避免掃描所有目錄,影響工程編譯效率** |
logEnabled |
boolean | true | 是否打印日志 |
viewNodeInfo |
boolean | false | 查看節(jié)點(diǎn)信息,只有與logEnable同時(shí)為true才會(huì)打印輸出 |
isAutoDeleteHistoryFiles |
boolean | false | 是否在構(gòu)建時(shí)刪除編譯產(chǎn)物,已棄用,在項(xiàng)目clean自動(dòng)刪除無用編譯產(chǎn)物,請(qǐng)不要設(shè)置此參數(shù)。 |
lifecycleObserverAttributeName |
string | lifecycleObserver | 如果使用了NavDest頁面模板化功能,該配置字段會(huì)生效,默認(rèn)屬性名是lifecycleObserver,也可以在@Route注解上單獨(dú)設(shè)置這個(gè)屬性 |
ignoredModules |
string[] | [] | 忽略需要掃描的模塊,填寫模塊名稱,默認(rèn)是全部模塊;插件在工程級(jí)時(shí)使用,該字段才會(huì)生效。建議配置該字段,避免掃描所有模塊,影響工程編譯效率 |
enableUiPreviewBuild |
boolean | false | 是否在ui預(yù)覽構(gòu)建時(shí)生成,默認(rèn)不啟用, 會(huì)降低ui預(yù)覽構(gòu)建效率 |
其中_generated目錄和route_map.json文件在編譯階段自動(dòng)生成的,建議在git的.gitignore忽略掉這兩個(gè)文件。
_generated
route_map.json
還有個(gè)關(guān)鍵點(diǎn)是,如果要跨模塊跳轉(zhuǎn),還是需要導(dǎo)入到 'Oh-package.json5'

ZRouter的基本使用
下載安裝

頁面跳轉(zhuǎn)
新建三個(gè)模塊分別是harA、harB、hspC,三者之間沒有依賴關(guān)系,entry模塊依賴了這三個(gè)模塊,通過ZRouter可以在四個(gè)模塊間相互跳轉(zhuǎn),從而達(dá)到模塊解耦效果。模塊關(guān)系圖如下圖:

1、在EntryAbility的onCreate()方法中初始化ZRouter,建議使用initialize()方法進(jìn)行初始化,init()方法已棄用

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
ZRouter.initialize((config) => {
config.isLoggingEnabled = BuildProfile.DEBUG
config.isHSPModuleDependent = true
config.onDynamicLoadComplete = () => {
console.log('完成所有模塊加載')
}
})
}
- App 入口頁面

- 將跳轉(zhuǎn)地址放到統(tǒng)一文件中

- 跳轉(zhuǎn)頁面處理

- 自動(dòng)生成的_generated

FAQ
@ZRoute等注解常量跨模塊查找失敗或者跳轉(zhuǎn)報(bào)錯(cuò)100005
可以檢查下以下幾個(gè)地方:
檢查所在模塊_generated和route_map.json5文件是否有生成的路由信息,如果沒有生成,檢查模塊下的hvigorfile.ts 是否添加編譯插件配置,以及scanDirs是否配置待掃描的路徑;
若有跨模塊定義,檢查常量類是否在模塊的Index.ets文件導(dǎo)出;
檢查模塊間的dependencies依賴是否正確,是否有空格;
檢查常量類文件是否是ets文件,目前是不支持ts文件。
以上都是正常的,可以清IDE緩存重啟下。
沒有生成_generated和route_map.json5文件
可以檢查下以下幾個(gè)地方:
模塊下的hvigorfile.ts文件中是否配置路由掃描的信息
跳轉(zhuǎn)頁面是否使用@Route或@ZRoute注解
修改路由名稱后跳轉(zhuǎn)報(bào)錯(cuò)100005
在修改路由名稱后跳轉(zhuǎn)報(bào)錯(cuò)100005,檢查發(fā)現(xiàn)route_map.json5文件確實(shí)是生效了,這時(shí)可以Clean Project項(xiàng)目重新編譯運(yùn)行。
路由轉(zhuǎn)場(chǎng)動(dòng)畫
參考 https://gitee.com/common-apps/ZRouter/wikis/%E8%B7%AF%E7%94%B1%E8%BD%AC%E5%9C%BA%E5%8A%A8%E7%94%BB