HarmonyOS鸿蒙Next中如何实现元服务中的pages和entry里面的pages的跳转?

HarmonyOS鸿蒙Next中如何实现元服务中的pages和entry里面的pages的跳转? 【问题描述】:ascf的pages和entry里面的pages有什么关联的吗?我可以在ascf的page里面跳到entry的pages不?

【问题现象】:不涉及

【版本信息】:不涉及

【复现代码】:包括不限于页面跳转 数据传递,相当于前端代码和原生之间的交互

5 回复

【解决方案】

  1. entry/src/main/ets/pages/Index.ets是整个ASCF元服务的外壳,负责拉起ascf/ascf_src/pages/index中的js/hxml/css工程文件。但是Index.ets由框架自动生成,修改后点击编译又会被覆盖。

  2. 不可以。但是您若想实现“相当于前端与原生的交互”,这个场景放在ASCF元服务中相当于“H5与ASCF元服务的交互”,请您参考官网文档:https://developer.huawei.com/consumer/cn/doc/architecture-guides/convenient-life-v1_2-ts_c134-0000002557101381

更多关于HarmonyOS鸿蒙Next中如何实现元服务中的pages和entry里面的pages的跳转?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我们是一个领取优惠券的元服务,领取优惠券的时候要打开很多第三方的网页,但是不能让每一个第三方的网页都放一个配置文件在他们的网站根目录,无法配置业务域名,所以在国内基本上是不可行的。

但是我们是海外的,测试过了,如果使用ArkWeb组件,不用配置业务域名也可以打开第三方网页。可是我们现在是uniapp写的程序,不知道怎么调用ArkWeb这个组件

通过App Linking方式尝试一下

import { common, OpenLinkOptions } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  build() {
    RelativeContainer() {
      Button("Call StartAbilityForResult")
        .onClick(() => {
          let context = this.getUIContext().getHostContext() as common.UIAbilityContext;
          // 需要跳转的应用链接
          let link: string = 'https://www.example.com';
          let openLinkOptions: OpenLinkOptions = {
            appLinkingOnly: true,
            parameters: { demo_key: 'demo_value' }
          };

          try {
            context.openLink(link, openLinkOptions).then(() => {
              console.info(`open link success.`);
            });
          } catch (e) {
            console.info(`open link fail.`);
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

在HarmonyOS Next中,元服务内页面跳转使用router模块。

  • 同模块内跳转:调用router.pushUrl(),传入目标页面的pages路径。
  • entry跳转:通过router.pushUrl()指定目标entry的页面路径,需在module.json5中配置目标页面的路由信息。
  • 返回上一页:使用router.back()
    确保目标页面已在配置文件中声明。

在HarmonyOS Next中,元服务(Ability Service Control Function,ASCF)的pages和entry的pages分别属于不同的模块,它们之间的跳转和数据传递是明确支持的。

1. 模块与路径关系

  • entry模块的pages:通常作为应用的主入口,路径格式为 pages/Index
  • ascf模块的pages:属于元服务内部页面,路径格式为 ascf/pages/Index

2. 页面跳转实现

你可以使用 router 模块在两者之间进行跳转。关键点在于正确指定目标页面的完整路径。

从entry跳转到ascf页面

// 在entry模块的页面中
import router from '@ohos.router';

// 跳转到ascf模块下的页面
router.pushUrl({
  url: 'ascf/pages/Index' // 指定ascf模块下的页面路径
})

从ascf跳转回entry页面

// 在ascf模块的页面中
import router from '@ohos.router';

// 跳转回entry模块的页面
router.pushUrl({
  url: 'pages/Index' // 返回entry主页面
})

3. 数据传递

跳转时可以使用 params 传递数据:

// 传递数据
router.pushUrl({
  url: 'ascf/pages/Detail',
  params: { id: 123, name: 'example' }
})

// 在目标页面接收数据
import router from '@ohos.router';

const params = router.getParams();
const id = params['id']; // 123
const name = params['name']; // 'example'

4. 配置注意事项

确保在 module.json5 配置文件中正确定义了路由路径。两个模块的页面都需要在各自的配置文件中声明。

这种设计允许元服务保持相对独立性,同时又能与主应用入口页面进行交互,实现了前端代码与原生模块之间的清晰通信。

回到顶部