鸿蒙路由通信(路由跳转/参数传递)

路由通信:

在鸿蒙中路由提供了两种方案:

1、Natigation:这种方案是目前官方推荐我们使用,这种方案涵盖的内容比较多。底部tabbar,顶部菜单,返回等等。集合了页面中各种跳转、返回、菜单等功能。

2、router路由:router里也有类似于以前vue或者react框架中提供的路由对象。在代码中调用它的api来实现路由的跳转、返回、参数的传递。

router路由跳转:

1、pushUrl:代表跳转页面的时候,将老的地址和新的地址都加入到页面执行栈。可以实现跳转后的记录信息,可以返回到指定的页面。

2、replaceUrl:目标页面会替换当前页,并销毁当前页。无法记录历史。无法返回跳转之前。

router的模式:

1、Standard:多实例模式,按照pushUrl来跳转,每次跳转路径都会放在执行栈当中,不会去管执行栈中是否存在同样的路由路径。

2、Single:单实例模式,按照pushUrl来跳转,每次跳转的路径都会在执行栈当中,如果下次访问同一个路径,默认将执行栈中存在的路径放在栈顶。

执行栈当中同样的路径只会存在一次。

跳转的API:

引入我们需要的router对象

import { router } from '@kit.ArkUI'

调用router进行页面跳转

.onClick(()=>{

router.pushUrl({

url:'pages/PageAdd'

})

})

.onClick(()=>{

router.replaceUrl({

url:'pages/PageAdd'

})

})

其中replaceUrl跳转过后无法实现返回到当前页面。

完整的写法:

.onClick(() => {

router.pushUrl({

url: 'pages/PageAdd'

}, router.RouterMode.Standard, (err) => {

if (err) {

console.log('路由跳转失败')

}

})

})

总结:

1、路由跳转过程中,可以只传递第一个参数。里面包含跳转的地址和传递参数。

2、路由跳转过程中,第二个参数可以省略。也可以加上。不写默认就是Standard模式。

3、参数三代表跳转结果。err值决定了是否有错误。

router 路由参数传递:

路由参数传递需要在前一个页面中传递的参数对象。

在后一个页面中接受传递过来的对象。

参数在传递过程中,对于参数类型是默认Object类型,在第二个页面中获取参数的时候,类型推断

只能推断结果为Object类型,造成后续使用的时候,ts无法明确参数格式。

页面一:

params就是路由传递参数的时候,默认属性。内容默认为Object,所以你可以传递任何结果。

.onClick(() => {

router.pushUrl({

url: 'pages/PageAdd',

params:{value:item}

}, router.RouterMode.Standard, (err) => {

if (err) {

console.log('路由跳转失败')

}

})

})

页面二:

获取到参数也默认为object.

获取到的params变量默认为object类型。后续在使用的时候出现类型无法明确,进行报错。

params.value // 报错

为了解决我们路由传递参数的约束问题,我们在viewmodel/paramstyle.ets文件进行约束。其中用到了泛型的概念。

约束我们接受到的结果必须有value属性。

value属性由用户自己来定义。

export class ParamsType<T> {

value:T

constructor(value:T) {

this.value = value

}

}

aboutToAppear(): void {

// 获取到路由传递过来的参数 params获取到的结果,默认类型是object

const params = router.getParams()

console.log(typeof params)

// 告诉我们编辑器,我明确知道params对象数据类型为ParamsType

const taskDetail = (params as ParamsType<TaskModel>).value

console.log(taskDetail.taskName)

}

这段代码采用了工具类约束接受到路由结果。其中用到了类型断言的知识点。

类型断言:我告诉编辑器,我比你更明白我的代码数据类型。不用自己去推断类型。

相关推荐
Li_Ning211 小时前
【vue3】实现pdf在线预览的几种方式
前端·pdf
水瓶丫头站住1 小时前
Qt的QTableWidget样式设置
前端·qt
2401_897605651 小时前
AI前端开发技能提升与ScriptEcho:拥抱AI时代的前端开发新范式
前端·人工智能
老K(郭云开)5 小时前
最新版Edge浏览器集成ActiveX控件之金山WpsDocFrame控件
前端·javascript·chrome·3d·中间件
Anyexyz5 小时前
Windows 11 卸载 Edge
前端·windows·edge
一路向前的月光7 小时前
React(6)
前端·javascript·react.js
众智创新团队7 小时前
singleTaskAndroid的Activity启动模式知识点总结
前端
祁许8 小时前
【Vue】打包vue3+vite项目发布到github page的完整过程
前端·javascript·vue.js·github
我的86呢!8 小时前
uniapp开发h5部署到服务器
前端·javascript·vue.js·uni-app
小爬的老粉丝8 小时前
基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接
前端