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
返回上一级页面时,可以也加上参数,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来判断其类型,或者根据业务逻辑进行类型转换。

