HarmonyOS ArkTS接口回调的案例问题

demo如下:

//MyInterDemo.ets 
export interface MyInterDemo { 
func_1: () => void; 
func_2: () => boolean; 
func_3: (arg: string) => void; 
}
//TestInterfacePage.ets 
import { MyInterDemo } from '…/interface/MyInterDemo' 
 
@Entry 
@Component 
struct TestInterfacePage { 
  testInter(inter: MyInterDemo) { 
    console.log('testInter'); 
    inter.func_1(); 
    inter.func_2(); 
    inter.func_3('hello'); 
  } 
 
  build() { 
    Row() { 
      Column() { 
        Button('Test interface') 
          .onClick(() => { 
            let demo: MyInterDemo = { 
              func_1: () => { 
                console.log('func_1'); 
              }, 
              func_2: () => { 
                console.log('func_2'); 
                return true; 
              }, 
              func_3: (arg: string) => { 
                console.log('func_3:' + arg); 
              } 
            } 
            this.testInter(demo); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

这个TestInterfacePage.ets调用了接口,假如需求是在TestInterfacePage调用。在B页面实现接口 这个应该怎么实现?

HarmonyOS
2024-11-04 11:40:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

实现ets:

import router from '@ohos.router'; 
import hilog from '@ohos.hilog'; 
import { AsyncCallback } from '@ohos.base'; 
const TAG: string = 'testTag' 
export class RouterParams { 
  private key: string 
  private value: string[] 
  constructor(key: string, value: string[]) { 
    this.key = key 
    this.value = value 
  } 
} 
export interface EmResult { 
  name: string 
} 
export class HarUtils { 
  static routerToAnother(context: Context, requestParam: RouterParams, callback: AsyncCallback<EmResult>) { 
    router.pushUrl({ 
      url: 'pages/Index', 
      params: requestParam 
    }, data => { 
      if (data) { 
        hilog.error(0x00000, TAG, '跳转失败'); 
        return; 
      } 
      hilog.info(0x00000, TAG, '跳转成功'); 
      hilog.info(0x00000, TAG, '传入的context:' + JSON.stringify(context)); 
      context.eventHub.on('care', callback) 
    }) 
  } 
}

调用页面:

import { InterUtils, MyInterDemo } from '../view/MyInterDemo'; 
import router from '@ohos.router'; 
import { EmResult, HarUtils, RouterParams } from '../interface/RouterParams'; 
import hilog from '@ohos.hilog'; 
@Entry 
@Component 
struct Index { 
  demo: MyInterDemo = router.getParams() as MyInterDemo 
  build() { 
    Row() { 
      Column() { 
        Button('Test interface') 
          .onClick(() => { 
 
            let param = new RouterParams('animal', ['dog', 'cat', 'bird']) 
            HarUtils.routerToAnother(getContext(), param, (data: EmResult) => { 
              hilog.info(0x00000, 'TAG', 'hap拿到的结果:' + JSON.stringify(data)); 
            }) 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
分享
微博
QQ
微信
回复
2024-11-04 16:09:36
相关问题
HarmonyOS ArkTS接口案例
360浏览 • 1回复 待解决
HarmonyOS 活体检测问题
69浏览 • 1回复 待解决
Flutter - EventChannel问题
49浏览 • 1回复 待解决
接口内定义匿名语法
1600浏览 • 1回复 待解决
HarmonyOS onScrollyoffset不准确问题
319浏览 • 1回复 待解决
HarmonyOS killAllProcesses()无成功
20浏览 • 0回复 待解决
HarmonyOS Web组件
105浏览 • 1回复 待解决
HarmonyOS 音频output 次数太少
264浏览 • 1回复 待解决
HarmonyOS 如何声明全局函数
235浏览 • 1回复 待解决
interface如何调用
846浏览 • 1回复 待解决
HarmonyOS 组件是否有销毁方法
392浏览 • 1回复 待解决
组件设置visibility属性
446浏览 • 2回复 待解决
webview静态资源下载完成
1553浏览 • 1回复 待解决