OpenHarmony开发者论坛

标题: router中params无法正常传递class对象 [打印本页]

作者: Summer    时间: 2023-8-29 18:33
标题: router中params无法正常传递class对象
[md]【问题描述】

路由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 dataata = 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 dataata = 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](data/attachment/forum/202308/29/183334bkuvi6fiitptddiv.png "AgAACLWCBLVEqkr9RjRIDq6EMyKYX3BH.png")

![]()

【运行环境】

硬件:rk3568;  ROM:  3.2 Beta5 ;  API 9
[/md]
作者: HmD    时间: 2023-8-29 18:35
这是正常的,通过router传递对象,只能传递对象中的属性,无法传递对象中的方法




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5