##Harmony OS Next ##Ark Ts ##教育
本文适用于教育科普行业进行学习,有错误之处请指出我会修改。
✨ 核心价值提炼:
三合一布局模式:单栏/分栏/自适应自由切换
跨包跳转黑科技:组件级路由丝滑转场
多端适配神器:自动响应屏幕尺寸变化
导航栏 DIY:标题/菜单/工具栏随心配
🎮 一、Navigation 初体验
组件定位:路由导航的宇宙中心🌌 👉 作为页面根容器(@Entry) 👉 三大显示模式任君选择:
版本进化史: ⚠️ API9+必须搭配 NavRouter → API10+推荐 NavPathStack
🎨 二、显示模式深度解析
1️⃣ 自适应模式(Smart Mode)
Navigation() {
// 内容区代码...
}
.mode(NavigationMode.Auto)
复制代码
📌 小贴士:
2️⃣ 分栏模式实战代码
@Entry
@Component
struct SplitModeExample {
// 状态管理部分...
build() {
Column() {
Navigation(this.pageInfos) {
// 搜索框+列表布局
TextInput().searchStyle()
List().dynamicItems()
}
.title("主标题")
.mode(NavigationMode.Split) // 关键设置!
.menus([...]) // 菜单栏配置
.toolbarConfiguration([...]) // 工具栏配置
}
}
}
复制代码
💡 代码亮点:
动态列表渲染 ForEach
多页面路由管理 NavPathStack
工具栏组件复用技巧
🎯 三、导航栏定制秘籍
标题栏双模式对比
菜单栏黄金法则
let menuItem = {'value': "", 'icon': "路径.svg", action: () => {}}
.menus([
menuItem,
menuItem,
menuItem // 竖屏最多3个!
])
复制代码
⚠️ 避坑指南:
🛠️ 四、工具类组件最佳实践
工具栏配置样例
let toolItem = {'value': "功能", 'icon': "./tools.svg"}
.toolbarConfiguration([
toolItem,
toolItem,
toolItem // 底部工具栏三件套
])
复制代码
🌟 效果预览: imagelink
🚀 五、路由管理进阶技巧
页面跳转核心代码
// 页面跳转触发
this.pageInfos.pushPath({name: "目标页面"})
// 返回逻辑处理
onBackPressed(() => {
this.pageInfos.pop() // 优雅退场
return true
})
复制代码
💡 调试技巧: console.log('pop结果:' + JSON.stringify(pop结果))
🌈 六、多端适配终极方案
🎁 开发福利: 一次编码自动适配所有设备,真正实现"Write Once, Run Anywhere"!
🤔 常见问题 QA: Q:如何隐藏导航栏? A:使用.hideNavBar(true)
轻松隐身
Q:不同 API 版本怎么选? A:API10+优先 NavPathStack,旧项目用 NavRouter 过渡
📡 路由操作超能力手册 | 跳转栈管理+动态路由+生命周期全掌握!🚀
✨ 核心亮点速览:
🚀 一、路由操作全家桶
路由栈三大金刚:
返回操作宝典:
// 基础返回
this.pageStack.pop()
// 花式返回
.popToName("Home") // 回主页
.popToIndex(2) // 回指定楼层
.clear() // 一键清空栈
复制代码
高阶玩法:
// 页面替换术
.replacePathByName("NewPage")
// 栈内大扫除
.removeByName("OldPage")
// 栈元素位移
.moveToTop("VIP页面")
复制代码
🛡️ 二、路由拦截系统
拦截回调三剑客:
this.pageStack.setInterception({
willShow: (from, to) => {
// 路由重定向示例
if(to.name == 'VIP页面') {
to.pathStack.replacePathByName("登录页")
}
},
didShow: () => {/* 跳转后操作 */},
modeChange: () => {/* 布局变化响应 */}
})
复制代码
📌 避坑指南:
拦截时栈已发生变化
建议在 willShow 做主要逻辑
可用 type 判断跳转来源
⏳ 三、生命周期全图解
生命周期时序表:
页面状态监听术:
// 全局监听
uiObserver.on('navDestinationUpdate', (info) => {
console.log('页面状态变化:', JSON.stringify(info))
})
// 组件内查询
@Component struct MyComp {
aboutToAppear() {
const pageInfo = this.queryNavDestinationInfo()
console.log("当前页面:", pageInfo?.name)
}
}
复制代码
🎭 四、转场动画黑科技
基础操作:
// 关闭全局动画
pageStack.disableAnimation(true)
// 单次关闭动画
pushPath({name:"Page"}, false)
复制代码
共享元素转场:
// 页面A
Image($r('app.media.logo'))
.geometryTransition('sharedLogo')
// 页面B
Image($r('app.media.logo'))
.geometryTransition('sharedLogo')
// 跳转时
animateTo({duration:1000}, () => {
pageStack.pushPath({name:'PageB'}, false)
})
复制代码
🌐 五、跨包动态路由
系统路由表三步走:
配置 route_map.json
{
"routerMap": [{
"name": "PaymentPage",
"pageSourceFile": "src/payment/PayPage.ets",
"buildFunction": "PayPageBuilder"
}]
}
复制代码
创建 Builder 函数
// PayPage.ets
@Builder
export function PayPageBuilder() {
PayPage() // 业务组件
}
复制代码
动态跳转
pageStack.pushPathByName("PaymentPage")
复制代码
路由表优势对比:
🚨 重要提醒
页面栈禁忌:
❌ 不要用生命周期管理路由栈
✅ 优先使用 NavPathStack API
弹窗页面秘籍:
.mode(NavDestinationMode.DIALOG)
.backgroundColor('rgba(0,0,0,0.5)')
// 透明背景+独立生命周期
复制代码
1.
动态加载技巧
:
使用import()
实现按需加载
HAR/HSP 模块化开发
路由配置与业务解耦
掌握这些神操作,Navigation 开发直接起飞!🛫 遇到问题随时回来查手册哦~ 😉
评论