当前位置: 首页 > news >正文

10.17 设置组件导航和页面路由

官网案例

@Entry
@Component
struct NavigationExample {// 1. 创建导航(路由)对象 NavPathStack@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()private arr: number[] = [1, 2, 3];// 2.创建配置路由的@Builder@BuilderPageMap(name: string) {if (name === "page1") {pageOneTmp()} else if (name === "page2") {pageTwoTmp()} else if (name === "page3") {pageThreeTmp()}}build() {Column() {//3. 给Navigation导航组件配置路由对象Navigation(this.pageInfos) {TextInput({ placeholder: 'search...' }).width("90%").height(40).backgroundColor('#FFFFFF')List({ space: 12 }) {ForEach(this.arr, (item:number) => {ListItem() {Text("Page" + item).width("100%").height(72).backgroundColor('#FFFFFF').borderRadius(24).fontSize(16).fontWeight(500).textAlign(TextAlign.Center).onClick(()=>{// 5. 此时就可以调用pageInfos对象的pushPath方法来实现路由跳转// 执行pushPath时,会自动调用PageMap这个@Builder,并把name值传给PageMapthis.pageInfos.pushPath({ name: "page" + item})})}}, (item:number) => item.toString())}.width("90%").margin({ top: 12 })}.title("主标题")// 4. 给Navigation配置路由Builder.navDestination(this.PageMap)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}// PageOne.ets
@Component
export struct pageOneTmp {// 6. 在子组件中接收根组件传来的路由对象@Consume('pageInfos') pageInfos: NavPathStack;build() {// 7. 子组件必须用NavDestination作为根组件NavDestination() {Column() {Text("第一页")Text("第二页").onClick(()=>{this.pageInfos.pushPath({name: 'page2'})})}.width('100%').height('100%')}// .title("NavDestinationTitle1")// .onBackPressed(() => {//   const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素//   console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))//   return true// })}
}// PageTwo.ets
@Component
export struct pageTwoTmp {@Consume('pageInfos') pageInfos: NavPathStack;build() {NavDestination() {Column() {Text("NavDestinationContent2")}.width('100%').height('100%')}.title("NavDestinationTitle2").onBackPressed(() => {const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))return true})}
}// PageThree.ets
@Component
export struct pageThreeTmp {@Consume('pageInfos') pageInfos: NavPathStack;build() {NavDestination() {Column() {Text("NavDestinationContent3")}.width('100%').height('100%')}.title("NavDestinationTitle3").onBackPressed(() => {const popDestinationInfo = this.pageInfos.pop() // 弹出路由栈栈顶元素console.log('pop' + '返回值' + JSON.stringify(popDestinationInfo))return true})}
}

淘小说代码

Index.ets

import { End } from './End'
import { Rank } from './Rank'@Entry
@Component
struct Index {@Provide("navPathStack") pageInfos: NavPathStack = new NavPathStack()@Builder PageMap(name: string){if (name === 'rank') {Rank()} else if (name === 'end') {End()} else if (name === 'free') {Free()}}build() {Navigation(this.pageInfos){Column(){Text("这是首页")Text("榜单").onClick(()=>{this.pageInfos.pushPath({name: 'rank'})})Text("完结").onClick(()=>{this.pageInfos.pushPath({name: 'end'})})}}.navDestination(this.PageMap)}
}

完结End.ets

@Component
export struct End {@Consume("navPathStack") pathInfos: NavPathStackbuild() {NavDestination(){Text("完结的内容")Text("榜单").onClick(()=>{this.pathInfos.pushPath({name: 'rank'})})Text("回到首页").onClick(()=>{// // 返回到根首页(清除栈中所有页面)this.pathInfos.clear() })}}
}

Navigation组件的属性

mode属性

设置单页面模式和分栏模式

三种选项: Auto | Stack | Split

Navigation(){...
}
.mode(NavigationMode.Auto)
  1. NavigationMode.Auto 默认值 , 自动检测屏幕宽度, 小于600vp屏幕宽度,采用单页面模式,大于600vp自动分栏 (适配)

  2. NavigationMode.Stack 无论何种屏幕宽度,都采用单页面模式

  3. NavigationMode.Split 无论何种屏幕宽度,都采用分栏模式

titleMode属性

设置标题样式 三种选项: Mini | Full | Free

Navigation(){...
}
.titleMode(NavigationTitleMode.Mini)
  1. NavigationTitleMode.Mini 标题显示在最顶端

  2. NavigationTitleMode.Full 强调型标题栏,用于一级页面需要突出标题的场景。

  3. NavigationTitleMode.Free 当内容为满一屏的可滚动组件时,标题随着内容向上滚动而缩小(子标题的大小不变、淡出)。向下滚动内容到顶时则恢复原样。

menus属性

设置菜单栏

menus支持Array<NavigationMenuItem>,使用Array<NavigationMenuItem>类型时,竖屏最多支持显示3个图标,横屏最多支持显示5个图标,多余的图标会被放入自动生成的更多图标。

注意: 图标放在ets的image子目录中, icon地址格式: ‘image/startIcon.png’

struct Index {private menuList: Array<NavigationMenuItem> = [{'value': "分享", 'icon': "image/startIcon.png", 'action': () => {this.pageInfos.pushPath({ name: 'NavDestinationTitle1' })}},{'value': "技术", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "问答", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "文章1", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "文章2", 'icon': "image/startIcon.png", 'action': () => {}}]build() {Navigation(this.pageInfos) {}.menus(this.menuList)}
}

toolbarConfiguration属性

设置工具栏内容。不设置时不显示工具栏。

struct Index {private toolBarList: ToolbarItem[] = [{'value': "技术1", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "技术2", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "技术3", 'icon': "image/startIcon.png", 'action': () => {}},{'value': "技术4", 'icon': "image/startIcon.png", 'action': () => {}},]...build() {Navigation(this.pageInfos) {}.toolbarConfiguration(this.toolBarList)}}

hideTitleBar(true)

隐藏标题栏

hideToolBar(true)

隐藏底部工具栏

通过配置系统路由表实现导航

  • 在首页中不需要配置PageMap

  • 不需要配置navDestination属性

  • 但在每个子页面中需要创建@builder并导出

  • 需要配置route_map.json

1. 创建导航页 (首页)

Index.ets

@Entry()
@Component
struct Index {// 1. 创建路由栈NavPathStack以此来实现不同页面之间的跳转。@Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack()build() {// 2. 使用Navigation创建导航主页,并传入路由栈Navigation(this.pageInfos) {Scroll() {Text('跳转')}}.mode(NavigationMode.Stack).height('100%').hideToolBar(true).hideTitleBar(true)}
}

2. 创建导航子页

Rank.ets

// 跳转页面入口函数
@Builder
export function RankBuilder(name: string, param: Object) {Rank()
}Component
export struct Rank {@Consume('NavPathStack') pageInfos: NavPathStack;build() {NavDestination() {Column() {}.width('100%').height('100%')}.hideTitleBar(true)}
}

3.配置route_map.json文件

【main】【resources】【base】【profile】

route_map.json

{"routerMap": [{"name": "rank","pageSourceFile": "src/main/ets/pages/Rank.ets","buildFunction": "RankBuilder","data": {"description": "Rank"}},...]
}

4 .配置module.json5

【main】

module.json5

Module 模块

{"module": {"routerMap": "$profile:route_map","requestPermissions": [{//设置申请网络权限"name": "ohos.permission.INTERNET"}],...}
}

实现首页转场到榜单页(Rank)

Index.ets

@Entry()
@Component
struct Index {@Provide('NavPathStack') pageInfos: NavPathStack = new NavPathStack()build() {Navigation(this.pageInfos) {Scroll() {Text('跳转到榜单页').onClick(() => {this.pageInfos.pushPath({ name: 'rank' })})}}.mode(NavigationMode.Stack).height('100%').hideToolBar(true).hideTitleBar(true)}
}
http://www.dtcms.com/a/495516.html

相关文章:

  • 福田做商城网站建设找哪家公司比较安全简约好看的网站模板免费下载
  • 【GD32F527_EVAL】USB 驱动移植 和 USB CDC Device 接入PC实验
  • 网站开发网站定制查看网站源代码建站可以
  • stm32_QT6怎么打包
  • c 做网站流程如何做做网站
  • 深度剖析大模型Function Calling:从原理到优化策略
  • SQL入门:表关联-从基础到优化实战
  • YOLOv3 技术总结
  • 为什么有些前端开发者能快速交付,有些还在纠结架构设计
  • Calibre(开源电子书管理软件) v8.13.0 官方便携版
  • wordpress数据库端口娄底seo排名
  • 途牛旅游网站建设方案临安区做网站的公司
  • 【原理扫描】SSL/TLS 服务器瞬时 Difie-Hellman 公共密钥过弱
  • Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
  • QML学习笔记(四十)QML的FileDialog和FolderDialog
  • 泉州做网站设计歌词插件wordpress
  • NLP意图识别
  • 智能科技 光速东莞网站建设番禺制作网站企业
  • 李宏毅机器学习笔记25
  • 大连模板建站哪家好网站如何加入百度联盟
  • 当大模型遇上 HTTP:一次“无状态”的相似性思考
  • 衡阳网站设计ss0734如何做公司官网
  • asp网站做文件共享上传手机个别网页打不开
  • 做网站图网页搭建环境
  • 山西 网站制作wifi扩展器做网站
  • 利用VOSviewer快速可视化文献全过程(以Web of science为例)
  • appcms程序怎么做网站网站管理公司
  • [Qt] 什么是qmake与cmake
  • DevOps学习笔记
  • DevOps是什么,有什么作用,一般用来干嘛