HarmonyOS router页面跳转在哪获取参数?

A页面push到B页面,B页面调用router.back({url:’’,params:{‘key’:‘value’}})

A页面在哪个方法里面拿到B页面传的参数,目前试了,aboutToAppear和onPageShow,返回的时候不走这个方法

阅读 394
1 个回答

是可以在onPageShow中获取B页面返回回来的参数的。

参考demo如下:

//PageA.ets
import router from '@ohos.router';

class DataModelInfo {
  age: number = 0;
}

class DataModel {
  id: number = 0;
  info: DataModelInfo | null = null;
}

function onJumpClick(): void {
  // 在Home页面中
  let paramsInfo: DataModel = {
    id: 123,
    info: {
      age: 20
    }
  };

  router.pushUrl({
    url: 'pages/PageB', // 目标url
    params: paramsInfo // 添加params属性,传递自定义参数
  }, (err) => {
    if (err) {
      console.error(`Invoke pushUrl failed, code is ${err.code}, message is ${err.message}`);
      return;
    }
    console.info('Invoke pushUrl succeeded.');
  })
}

@Entry
@Component
struct PageA {
  //在返回的目标页面中,在需要获取参数的位置调用router.getParams()方法即可,例如在onPageShow()生命周期回调中
  onPageShow() {
    console.log('PageA onPageShow')
    const params = router.getParams() as Record<string, string>; // 获取传递过来的参数对象
    if (params) {
      const info: string = params.info as string; // 获取info属性的值
      console.log('1111',JSON.stringify(info))
    }
  }

  build() {
    Column() {
      Text('Page A')
      Button('jump To PageB').onClick(() => {
        onJumpClick()
      })
    }
  }
}
//PageB.ets
import router from '@ohos.router';

class DataModelInfo {
  age: number = 0;
}

class DataModel {
  id: number = 0;
  info: DataModelInfo | null = null;
}

function onJumpClick(): void {
  let paramsInfo: DataModel = {
    id: 123,
    info: {
      age: 20
    }
  };

  router.back({
    url: 'pages/PageA', // 目标url
    params: {
      info: '来自PageB页传递过来的参数',
    }

  });
}

@Entry
@Component
struct PageTwo {
  build() {
    Column() {
      Text('Page B')
      Button('Back To PageA').onClick(() => {
        onJumpClick()
      })
    }
  }
}