HarmonyOS鸿蒙Next中Navigation获取页面参数getParamByName的返回值为什么是Array?

HarmonyOS鸿蒙Next中Navigation获取页面参数getParamByName的返回值为什么是Array?

cke_1330.png

文档中的原文是 “返回全部名为name的NavDestination页面的参数信息。”

返回页面名为 name 的 页面参数,

那这个参数是哪里来的呢?

Page 1:

pageInfos.pushDestinationByName('name', params);

Page 2:

let info:InfoBean = this.pageInfos.getParamByName(this.userCode)[0] as InfoBean

在上述例子中 page1 的 params 为页面参数,这里的参数有且仅有一个而且只能有一个

其中 name 只能唯一,因为需要在 rote_map.json 文件中定义不可重复

在page2 中接收参数时为什么需要用array?


更多关于HarmonyOS鸿蒙Next中Navigation获取页面参数getParamByName的返回值为什么是Array?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

getParamByName是路由栈NavPathStack的实例方法,路由栈中一个页面可以入栈多次。例如在页面A中push一个页面A,此时路由栈中就有两个页面A,每次跳转到页面A可能携带不同的参数,所以getParamByName方法的返回值需要是数组。

更多关于HarmonyOS鸿蒙Next中Navigation获取页面参数getParamByName的返回值为什么是Array?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


因为你可以 push 多个 Page 2 页面

在HarmonyOS鸿蒙Next中,getParamByName方法返回Array是因为页面参数可能包含多个同名参数。例如,URL中可能存在多个相同名称的查询参数,getParamByName会将这些值以数组形式返回,确保所有同名参数都能被获取。这种设计允许开发者处理多个同名参数的情况,避免数据丢失。

在HarmonyOS Next中,getParamByName返回Array的设计是出于导航栈管理的考虑。当使用Navigation导航时,同一个页面名称(name)可能在导航栈中存在多个实例(比如用户多次跳转到同一页面),每个实例都可以携带不同的参数。

具体到您的例子:

  1. 虽然您在page1通过pushDestinationByName推送参数时只传了一个params,但系统仍以数组形式存储,这是为了保持设计一致性。
  2. 当页面在导航栈中存在多个实例时,数组可以包含所有实例的参数。
  3. 即使当前只有一个实例,返回数组也简化了API设计,避免为单例做特殊处理。

建议使用时:

  • 如果确定只有一个实例,可以直接取数组第一个元素(如示例中的[0])。
  • 这种设计也为未来可能的场景(如页面复用)提供了扩展性。

这种设计模式在路由框架中比较常见,主要是为了处理页面多实例的场景。

回到顶部