HarmonyOS鸿蒙Next中router.getParams()不能使用instanceof判断返回值吗?

HarmonyOS鸿蒙Next中router.getParams()不能使用instanceof判断返回值吗?

页面A跳转至B 或者 C, 在 router.back中添加返回值 PageBResult 或 PageCResult 并返回, 在 A页面的 onPageShow() 方法中,通过 router.getParams() 获取返回值。

instanceof 并不能判断是 PageBResult 还是 PageCResult 类型。

请问这种情况,我该如何区分当前A页面是从B返回,还是从C返回?

import { router } from '@kit.ArkUI'
import { PageBResult } from './PageB'
import { PageCResult } from './PageC'

@Entry
@Component
struct PageA {
  build() {
    Column() {
      Button('跳转至PageB')
        .onClick(() => {
          router.pushUrl({
            url: "pages/test/PageB"
          })
        })

      Button('跳转至PageC')
        .onClick(() => {
          router.pushUrl({
            url: "pages/test/PageC"
          })
        })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }
  onPageShow(): void {
    let params = router.getParams();

    if (params instanceof PageBResult) {
      console.info('page B')
    } else if (params instanceof PageCResult) {
      console.info('page C')
    }
  }
}
import { router } from '@kit.ArkUI'

@Entry
@Component
struct PageB {
  build() {
    Column() {
      Button('返回').onClick(() => {
        router.back(router.getState().index - 1, new PageBResult())
      })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }
}

export class PageBResult {
  source: string = 'B'
}
import { router } from '@kit.ArkUI'

@Entry
@Component
struct PageC {
  build() {
    Column() {
      Button('返回').onClick(() => {
        router.back(router.getState().index - 1, new PageCResult())
      })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }
}

export class PageCResult {
  source: string = 'C'
}

更多关于HarmonyOS鸿蒙Next中router.getParams()不能使用instanceof判断返回值吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

返回上一级页面时,可以也加上参数,url传空,上一级页面还用router.getParams()取参数

import { router } from '@kit.ArkUI'

@Entry
@Component
struct PageA {

  build() {
    Column() {
      Button('跳转至PageB')
        .onClick(() => {
          router.pushUrl({
            url: "pages/test/PageB"
          })
        })
      Button('跳转至PageC')
        .onClick(() => {
          router.pushUrl({
            url: "pages/test/PageC"
          })
        })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }

  onPageShow(): void {
    let params = router.getParams() as result;
    if (params?.page == 'PageB') {
      console.info('page B')
    } else if (params?.page == 'PageC') {
      console.info('page C')
    }
  }
}

class result {
  page: string
  result: PageResult
  constructor(page: string, result: PageResult) {
    this.page = page
    this.result = result
  }
}

export class PageResult{
}

A: import { router } from '@kit.ArkUI'
import { PageResult } from './PageA'

@Entry
@Component
struct PageB {
  build() {
    Column() {
      Button('返回').onClick(() => {
        router.back(router.getState().index - 1, {page:'PageB',result:new PageBResult()})
      })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }
}

export class PageBResult extends PageResult{
  source: string = 'B'
}

import { router } from '@kit.ArkUI'
import { PageResult } from './PageA'

@Entry
@Component
struct PageC {
  build() {
    Column() {
      Button('返回').onClick(() => {
        router.back(router.getState().index - 1, {page:'PageC',result:new PageCResult()})
      })
    }.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)
  }
}

export class PageCResult extends PageResult{
  source: string = 'C'
}

更多关于HarmonyOS鸿蒙Next中router.getParams()不能使用instanceof判断返回值吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,router.getParams()返回的是一个Object类型的数据。由于JavaScript/ArkTS中的instanceof操作符主要用于判断对象是否属于某个类的实例,而router.getParams()返回的是一个普通的Object,因此不能直接使用instanceof来判断其具体类型。如果你需要判断返回值的类型,可以通过typeof或直接检查对象的属性来实现。

在HarmonyOS鸿蒙Next中,router.getParams()返回的是Object类型,而instanceof通常用于判断对象是否属于某个特定的类。由于router.getParams()返回的是一个通用对象,无法直接使用instanceof来判断其具体类型。建议通过检查返回对象的属性或使用typeof来判断其类型,或者根据业务逻辑进行类型转换。

回到顶部