羊蹓狼 发表于 2024-7-17 04:53:11

页面跳转和两个页面之间的数据传递-鸿蒙ArkTS

页面跳转和两个页面之间的数据传递-ArkTS

   本篇文章主要是对两个页面之间数据传递进行实现。
https://img-blog.csdnimg.cn/b597f3b349db4aaf9b67a967c8d7a92b.png#pic_center
https://img-blog.csdnimg.cn/3c5b555c55164cfba44edb4858be077d.png#pic_center
关于router的利用

页面跳转和参数接受是通过导入 router 模块实现。
import router from '@ohos.router';


[*]router.pushUrl() 跳转到指定页面。
[*]router.replaceUrl() 替换当前页面并烧毁。
[*]router.back() 返回上一个页面。
[*]router.getParams() 获取上一个页面跳转过来携带的参数。
[*]router.clear() 清空当前页面栈中全部汗青页面,只会保留当前页面作为栈顶页面。
[*]router.getLength() 获取当前页面栈中的页面数目。
[*]router.getState() 获取当前页面的状态信息。
[*]router.showAlertBeforeBackPage() 开启页面返回询问对话框。
[*]router.hideAlertBeforeBackPage() 禁用页面返回询问对话框。
跳转页面的实现方式。

   API9及以上,router.pushUrl()方法新增了mode参数,可以将mode参数配置为router.RouterMode.Single单实例模式和router.RouterMode.Standard多实例模式。
router.pushUrl()方法内的基本参数
router.pushUrl({
        // 跳转页面路径
        url: '页面',
        // 跳转携带的参数
        params: {
                变量名:值
        }
}, 当前模式)
方式一
在多实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶近来同url页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然存在栈中,页面栈的元素数目不变;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数目会加1。
// params对象内的变量是可以自定义参数名的,任意名称都可以只要在接受的时候通过传递时过来的变量名称就可以的。
router.pushUrl({
url: 'pages/Second',
params: {
        name: 'Index页面传递'
}
}, router.RouterMode.Single)
方式二
在单实例模式下:如果目标页面的url在页面栈中已经存在同url页面,离栈顶近来同url页面会被移动到栈顶,替换当前页面,并烧毁被替换的当前页面,移动后的页面为新建页,页面栈的元素数目会减1;如果目标页面的url在页面栈中不存在同url页面,按多实例模式跳转,页面栈的元素数目不变。
// params对象内的变量是可以自定义参数名的,任意名称都可以只要在接受的时候通过传递时过来的变量名称就可以的。
router.pushUrl({
url: 'pages/Second',
params: {
        name: 'Index页面传递'
}
}, router.RouterMode.Standard)
页面接受跳转传递的参数

通过 router.getParams() 方法获取页面传递过来的自定义参数。
import router from '@ohos.router'
@Entry
@Component
struct Second {
    // 用于接受由页面跳转传递的参数名称
@State str: string = router.getParams()?.['name']
        // 页面刷新展示
    ....

}
页面返回及携带参数

返回上一个页面
router.back();
返回指定页面
router.back({url: 'pages/Index'});
返回并携带参数
// 需要在 router.back() 方法内类似 router.pushUrl() 的用法
router.back({
url: 'pages/Index',
params: {
        src: 'Second传回来的数据'
}
})
吸取返回的参数
import router from '@ohos.router'
@Entry
@Component
struct Index {
        //定义一个变量来接收返回的参数
@State src: string = ''

    // 这是一个生命周期,当页面每次显示的时候都会调用
onPageShow(){
      // 通过拿到 router 中名称为 src 的值
    this.src = router.getParams()?.['src']
}

build() {
    Row() {
      Column() {
          // 将返回接收到的值显示
      Text(this.src)
      Button('Next')
          .width("90%")
          .onClick(() => {
            router.pushUrl({
            url: 'pages/Second',
            params: {
                name: 'Index页面传递'
            }
            }, router.RouterMode.Single)
          })
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
}
}
效果

https://img-blog.csdnimg.cn/075909c9a318429a9978e70f7dc9ae8f.png#pic_center
https://img-blog.csdnimg.cn/51db6c21cf1b4ec69678783bec1c0f87.png#pic_center
代码

Index页面

import router from '@ohos.router'
@Entry
@Component
struct Index {
@State message: string = 'Hello World'

@State src: string = ''

onPageShow(){
    this.src = router.getParams()?.['src']
}

build() {
    Row() {
      Column() {
      Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      Text(this.src)
      Button('Next')
          .width("90%")
          .onClick(() => {
            router.pushUrl({
            url: 'pages/Second',
            params: {
                name: 'Index页面传递'
            }
            }, router.RouterMode.Single)
          })
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
}
}
Second页面

import router from '@ohos.router'
@Entry
@Component
struct Second {
@State message: string = 'Hello World'
@State str: string = router.getParams()?.['name']

build() {
    Row() {
      Column() {
      Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      Text(this.str)
      Button('back')
          .onClick(() => {
            router.back({
            url: 'pages/Index',
            params: {
                src: 'Second传回来的数据'
            }
            })
          })
          .width("90%")
      }
      .width('100%')
    }
    .height('100%').backgroundColor('#efefef')
}
}
参考资料

官网文档:
官网视频对应文档
router参考文档
官网视频:
官网对应视频

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 页面跳转和两个页面之间的数据传递-鸿蒙ArkTS