鸿蒙分享(二):引入zrouter路由跳转+封装

码仓库:https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12

鸿蒙第三方库地址:OpenHarmony三方库中心仓

zrouter地址:OpenHarmony三方库中心仓

1.引入zrouter

1.打开终端界面:输入 ohpm install @hzw/zrouter
2.在项目根目录的hvigor目录的hvigor-config.json5文件中配置安装 Sync Now或重新build让插件安装生效
复制代码
"router-register-plugin":"1.1.1"
3.导入router-register-plugin插件模块

3.1在common模块的hvigorfile.ts文件导入router-register-plugin插件模块,如下

复制代码
import { harTasks } from '@ohos/hvigor-ohos-plugin';
import { routerRegisterPlugin, PluginConfig } from 'router-register-plugin'

const config: PluginConfig = {
  scanDirs: ["src/main/ets/components"],
  logEnabled: true, // 查看日志
  viewNodeInfo: false, // 查看节点信息
  isAutoDeleteHistoryFiles: true // 删除无用编译产物
}

export default {
  system: harTasks,
  plugins: [routerRegisterPlugin(config)]
}

3.2 在entry模块的hvigorfile.ts文件导入router-register-plugin插件模块,如下

复制代码
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
import { routerRegisterPlugin, PluginConfig } from 'router-register-plugin'

const config: PluginConfig = {
  scanDirs: ['src/main/ets/pages'],
  logEnabled: true, // 查看日志
  viewNodeInfo: false, // 查看节点信息
  isAutoDeleteHistoryFiles: false // 删除无用的编译产物

}

export default {
  system: hapTasks,
  plugins: [routerRegisterPlugin(config)]
}
4.初始化ZRouter

找到EntryAbility,onCreate方法添加如下代码

复制代码
    // 如果项目中存在hsp模块则传入true
    ZRouter.initialize((config) => {
      config.isLoggingEnabled = BuildProfile.DEBUG
      config.isHSPModuleDependent = true
      config.loadDynamicModule = ['@hzw/hara', 'harb', 'hspc']
      config.onDynamicLoadComplete = () => {
        console.log("已完成所有模块的加载")
      }
    })
5.使用

编辑器新建页面:NewPages.ets

手动添加页面则在entry--src--main--resoures--base--profile--main_pages.json 添加路径

代码如下:

复制代码
import { Route } from '@hzw/zrouter';

@Route({ name: "NewPages" })
@Entry
@Component
export struct NewPages {
  build() {
    NavDestination() {
      Text("NewPagesHelloWorld")
        .fontSize(50)
    }
    .height('100%')
    .width('100%')
  }
}

跳转:

2.封装

新建BaseRouter.ets 代码如下

复制代码
import { ZRouter } from '@hzw/zrouter';
import { OnPopCallback } from '@hzw/zrouter/src/main/ets/model/Model';

/**
 * 路由跳转
 */
export class BaseRouter {
  static readonly NewPages = "NewPages"

  /**
   * 页面跳转
   * BaseRouter.push(BaseRouter.WebViewPage, Object({title: "用户协议"}))
   */
  static push(name: string, params?: object, animated?: boolean, mode: LaunchMode = LaunchMode.STANDARD) {
    ZRouter.getInstance()
      .setLunchMode(mode)
      .setParam(params)
      .setAnimate(animated)
      .push(name)
  }

  //替换页面
  static replacePathByName(name: string, params?: object, animated?: boolean, mode: LaunchMode = LaunchMode.STANDARD) {
    ZRouter.replacePathByName(name, params, animated)
    ZRouter.getInstance().setLunchMode(mode).setParam(params).replace(name)
  }

  // 页面跳转带返回值
  public static pushForResult(name: string, param?: object, callback?: OnPopCallback) {
    ZRouter.pushForResult(name, param, callback)
  }

  //后退
  static back() {
    ZRouter.pop()
  }

  static clear() {
    ZRouter.clear()
  }

  //后退带返回值
  static backWithResult(params?: object) {
    ZRouter.popWithResult(params)
  }

  /**
   * 获取参数
   * @param key
   * @returns
   * 使用:BaseRouter.getParamName<string>("title") ?? ""
   */
  static getParamName<T>(key: string): T | undefined {
    let aa = ZRouter.getParam() as object
    if (aa) {
      return aa[key]
    }
    return undefined
  }
}

导出BaseRouter.ets

index.ets export { BaseRouter } from './src/main/ets/utils/BaseRouter'

1.修改index.ets

复制代码
import { ZRouter } from '@hzw/zrouter';
import { BaseRouter } from 'common';

@Entry
@Component
struct Index {
  build() {
    Navigation(ZRouter.getNavStack()) {
      Column() {
        Text("To NewPages")
          .fontSize(50).onClick(() => {
          BaseRouter.push(BaseRouter.NewPages, Object({
            title: "哈哈哈",
          }))
        })
      }
    }
    .height('100%')
    .width('100%')
  }
}

2.修改NewPages.ets

复制代码
import { Route } from '@hzw/zrouter';
import { BaseRouter } from 'common';

@Route({ name: BaseRouter.NewPages })
@Entry
@Component
export struct NewPages {
  @State title: string = '';

  aboutToAppear(): void {
  //获取传参
    this.title = BaseRouter.getParamName<string>("title") ?? ""
    console.log("title:"+this.title)
  }

  build() {
    NavDestination() {
      Text("NewPagesHelloWorld")
        .fontSize(50)
    }.title(this.title)
    .height('100%')
    .width('100%')
  }
}

3:点击text跳转

相关推荐
maaath1 天前
【maaath】Flutter for OpenHarmony 跨平台工程集成密码加密能力
flutter·华为·harmonyos
liulian09161 天前
Flutter for OpenHarmony 混合开发实践:用户反馈功能的实现与适配
flutter·华为·学习方法·harmonyos
Hello__77771 天前
开源鸿蒙 Flutter 实战|文章分类标签功能全流程实现
flutter·开源·harmonyos
GitCode官方1 天前
一声唤醒 万物响应|AtomGit 首款开源鸿蒙 AI 硬件「小鸿」发布会圆满落幕 定义智能交互新入口
人工智能·开源·harmonyos
国医中兴1 天前
Flutter 三方库 nhost_graphql_adapter 的鸿蒙化适配指南 - 云端数据实时对齐、GraphQL 架构实战、鸿蒙级全栈交互专家
flutter·harmonyos·graphql
nashane1 天前
HarmonyOS 6学习:RCP远场通信流式返回实战——告别“一次性”数据阻塞
学习·华为·harmonyos
李游Leo1 天前
别把耗时任务都丢进 async:HarmonyOS 里 TaskPool 和 Worker 的边界感
harmonyos
不喝水就会渴1 天前
HarmonyOS 6.1 新特性:悬浮页签和沉浸光感技术实践
华为·harmonyos
心走1 天前
鸿蒙OpenGL ES渲染H264花屏问题
harmonyos
IntMainJhy1 天前
Flutter 三方库 get_it + flutter_bloc 的鸿蒙化适配与实战指南
flutter·华为·harmonyos