HarmonyOS鸿蒙Next中使用Navigation跳转到组件时如何传递@ObjectLink修饰的参数

HarmonyOS鸿蒙Next中使用Navigation跳转到组件时如何传递@ObjectLink修饰的参数

@Builder Detail(name: string) { if (name === ‘Detail’) { WereWolfDetail({ gameRound: this.gameRound }); } }

//父页面 @Entry @Component struct Main { @Provide pageStack: NavPathStack = new NavPathStack(); @State gameRound: GameRound | undefined = undefined; build() { Navigation(this.pageStack) { Button(“进入游戏”) .onClick(() => { this.gameRound = new GameRound(this.currentRolesSet); this.pageStack.pushPath({ name: ‘Detail’ }); }) .width(“100%”) .height(65) .type(ButtonType.Normal) .borderRadius(10) .backgroundColor(’#5A87C7’) .enabled(this.currentRolesSet[RoleName.SomeOne] > 5 ? true : false) } .hideTitleBar(true) .navDestination(this.Detail) } }

//子组件 @Builder export function DetailBuilder() { Detail() }

@Component export struct Detail { @Consume pageStack: NavPathStack; build() { NavDestination() { //… } .hideTitleBar(true) }

编译时报错:

hvigor ERROR: Failed :entry:default@CompileArkTS… hvigor ERROR: ArkTS Compiler Error 1 ERROR: ArkTS:ERROR File: D:/ProgramProject/GG/entry/src/main/ets/view/wereWofDetailView.ets:6:3 Property ‘gameRound’ in the custom component ‘wereWolfDetailView’ is missing (mandatory to specify). COMPILE RESULT:FAIL {ERROR:2} hvigor ERROR: BUILD FAILED in 774 ms


更多关于HarmonyOS鸿蒙Next中使用Navigation跳转到组件时如何传递@ObjectLink修饰的参数的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next中使用Navigation跳转到组件时传递@ObjectLink修饰的参数,可以通过以下步骤实现:

  1. 定义@ObjectLink修饰的参数:在源组件中定义一个@ObjectLink修饰的参数,这个参数通常是一个对象或数组,用于绑定到目标组件的数据。

  2. 使用Navigation进行跳转:在源组件中调用router.push方法进行页面跳转时,通过params参数将@ObjectLink修饰的参数传递给目标组件。

  3. 在目标组件中接收参数:在目标组件的aboutToAppear生命周期方法中,通过router.getParams方法获取传递过来的参数,并将其赋值给目标组件中相应的@ObjectLink修饰的变量。

示例代码如下:

// 源组件
@Entry
@Component
struct SourcePage {
  [@ObjectLink](/user/ObjectLink) data: MyData;

  build() {
    Column() {
      Button('Jump to Target Page')
        .onClick(() => {
          router.push({
            url: 'pages/TargetPage',
            params: { data: this.data }
          });
        });
    }
  }
}

// 目标组件
@Entry
@Component
struct TargetPage {
  [@ObjectLink](/user/ObjectLink) data: MyData;

  aboutToAppear() {
    const params = router.getParams();
    this.data = params['data'];
  }

  build() {
    Column() {
      Text(this.data.message);
    }
  }
}

// 数据类
class MyData {
  message: string = 'Hello, HarmonyOS!';
}

在这个示例中,SourcePage组件中的data参数通过router.push方法传递给TargetPage组件,并在TargetPage组件的aboutToAppear方法中接收并绑定到data变量上。

更多关于HarmonyOS鸿蒙Next中使用Navigation跳转到组件时如何传递@ObjectLink修饰的参数的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,使用Navigation跳转到组件时,可以通过params参数传递数据。对于@ObjectLink修饰的参数,建议将其包装在一个对象中,然后通过params传递该对象。例如:

// 定义数据对象
class MyData {
  @ObjectLink value: string;
}

// 跳转时传递参数
const myData = new MyData();
myData.value = "Hello";
router.pushUrl({
  url: 'pages/MyPage',
  params: { data: myData }
});

// 目标页面接收参数
@Entry
@Component
struct MyPage {
  @State data: MyData = new MyData();

  onPageShow() {
    const params = router.getParams();
    if (params && params.data) {
      this.data = params.data;
    }
  }
}

这种方式确保@ObjectLink修饰的参数在跳转后仍然保持响应式。

回到顶部