一个鸿蒙动态路由框架,基于Navigation的路由框架,可以非常方便的使用注解注册,就能实现组件之间的跳转,方便组件的解耦
HarmonyOS 5.0.0
compileSdkVersion
12
minSdkVersion
12
1.1 在 hvigor-config.json5中添加插件-> "xrouter-plugin": "1.0.14",
具体请使用最新版本:https://www.npmjs.com/package/xrouter-plugin
在项目入口module的hvigorfile.ts中配置插件:
import { XRouterPlugin } from 'xrouter-plugin'
export default {
system: hapTasks,
plugins: [XRouterPlugin()]
}
1.2 安装依赖-> ohpm install @ustory/xrouter
pageInfos:NavPathStack = new NavPathStack ( )
aboutToAppear ( ) : void {
//1 绑定路由
XRouterManager . getInstance ( ) . bindNavPathStack ( this . pageInfos )
//XRouteConfig 需要rebuild Project 动态生成一下
XRouterManager . getInstance ( ) . bindRouteConfig ( XRouterConfig . initialize )
}
build ( ) {
Navigation ( this . pageInfos ) {
NavDestination ( ) {
...
}
} . navDestination ( this . pageBuilder )
}
//2 绑定路由构建器
@Builder
pageBuilder ( name : string , param : Object ) {
XRouterManager . getInstance ( ) . get ( name ) ?. builder ( param )
}
XRouterConfig 是动态生成的类,先执行Rebuild project 生成这个信息配置
1.在页面上添加注解定义
//host 可以不传,默认是native
@XRouter({host:'native',path:'demo'})
@Component
export struct Demo {
@XRouteParam() //路由参数,注意:只能声明一个
pageParam?:Object
build() {
NavDestination(){
Text("Demo page")
}
}
}
2.跳转
XRouterNavigator.push('native://demo',{param: 789})
注解方式不支持解析字节码HAR ,此时需要采用手动注册方式,具体可以代理 XRouterConfig
例子:
async proxyXRouterConfig(path:string){
switch (path){
case "native://custom":{
await import('./CustomInitialize')
break;
}
}
XRouterConfig.initialize(path)
}
XRouterManager.getInstance().bindRouteConfig(this.proxyXRouterConfig)
//CustomInitialize.ets 内容
import { XRouterManager } from '@ustory/xrouter'
import { CustomPage } from './CustomPage'
@Builder
function XRouterBuilder(param:Object) {
CustomPage({pageParam: param})
}
function init(){
XRouterManager.getInstance().register('native://custom', wrapBuilder<Object[]>(XRouterBuilder))
}
init()
路由构建会有缓存信息,如果插件升级导致一直生成失败,可以将项目目录下.cache 删除,再次重试
参数
类型
说明
url
string
目标页面的路由地址
option
PushOption(可选)
跳转选项
option.param
Object(可选)
传递给目标页面的参数
option.onPopResult
(data: any) => void(可选)
接收返回结果作为参数,仅当调用pop相关方法传递参数时才回调
option.onClose
() => void(可选)
上一个页面被关闭时回调
option.animated
boolean(可选)
是否启用动画效果
参数
类型
说明
option
PopOption(可选)
返回选项
option.result
any(可选)
返回结果
option.animated
boolean(可选)
是否启用动画效果
参数
类型
说明
option
PopOption(可选)
返回选项
option.result
any(可选)
返回结果
option.animated
boolean(可选)
是否启用动画效果
参数
类型
说明
url
string
目标页面的路由地址
option
PopOption(可选)
返回选项
option.result
any(可选)
返回结果
option.animated
boolean(可选)
是否启用动画效果
参数
类型
说明
url
string
目标页面的路由地址
params
Object(可选)
传递给目标页面的参数
animated
boolean(可选)
是否启用动画效果
onPopToRootResult 监听popToRoot携带的返回结果
属性名
类型
是否必填
默认值
描述
debugMode
boolean
否
false
是否开启调试模式,调试模式会有日志输出
genDir
string
否
'src/main/ets/gen'
自定义生成路由文件的目录路径