• Lv0
    粉丝0

积分77 / 贡献0

提问30答案被采纳0文章0

router中params无法正常传递class对象

Summer 显示全部楼层 发表于 2023-8-29 18:33:38

【问题描述】

路由router通过params传递对象,另一个页面接收到的对象不正确,我提取了一个简单的示例,请问这是什么原因啊 。

Data.ets定义类

class Data {
  private data:string = 'initData'

  getData() {
    return this.data
  }

  setData(data) {
    this.data = data
  }
}

export default Data

页面1,点击跳转按钮跳转到页面,同时传参字符和Data实例对象

import router from '@ohos.router';
import Data from './Data'

@Entry
@Component
struct Page1 {
  @State message: string = 'Hello World'
  @State data:Data = new Data()

  build() {
    Row() {
      Column() {
        Text('page1')
          .fontSize(50)
          .padding(20)
        Button('跳转page2')
          .fontSize(30)
          .height(70)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            router.pushUrl({
              url: 'pages/Page2',
              params: {
                myData: this.data,
                message: this.message
              }
            })
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

page2,点击按钮,打印传递的参数

import router from '@ohos.router';
import Data from './Data'
@Entry
@Component
struct Page2 {
  @State message: string = router.getParams()['message']
  @State data:Data = router.getParams()['data']
  @State datas:string = ''

  build() {
    Row() {
      Column() {
        Text('page2')
          .fontSize(50)
          .padding(20)
        Text("接收到的字符: " +this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
        Button('查看传递数据')
          .fontSize(30)
          .height(70)
          .fontWeight(FontWeight.Bold)
          .onClick(()=>{
            this.getData()
          })
      }
      .width('100%')
    }
    .height('100%')
  }

  getData(){
    let params = router.getParams()
    console.info("log:" + params['message'])
    let myData = params['myData']
    console.info("log:" + JSON.stringify(myData))
    console.info("log:" + (myData instanceof Data))
    console.info("log:" + myData.data)
    console.info("log:" + myData.getData())
  }
}

通过打印结果,可以看到传递的对象变了

AgAACLWCBLVEqkr9RjRIDq6EMyKYX3BH.png

![]()

【运行环境】

硬件:rk3568; ROM: 3.2 Beta5 ; API 9

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

HmD

沙发 发表于 2023-8-29 18:35:22
这是正常的,通过router传递对象,只能传递对象中的属性,无法传递对象中的方法

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部