HarmonyOS 鸿蒙Next:请教一个问题 我这边现在封装了一个Web的Component 现在Component里面包括webviewController和JsBridge等等的代码 现在外部页面代码有好的方法拿到这个内部的webviewControl

发布于 1周前 作者 h691938207 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:请教一个问题 我这边现在封装了一个Web的Component 现在Component里面包括webviewController和JsBridge等等的代码 现在外部页面代码有好的方法拿到这个内部的webviewControl

请教一个问题: 我这边现在封装了一个 Web的Component 现在 Component 里面 包括 webviewController 和 JsBridge等等的代码 现在外部页面代码 有好的方法拿到这个内部的webviewController 引用吗? (例如,外部点击返回的时候,我需要 拿到 webviewController 是否有上一页, 我是处理上一页,还是返回等操作)


更多关于HarmonyOS 鸿蒙Next:请教一个问题 我这边现在封装了一个Web的Component 现在Component里面包括webviewController和JsBridge等等的代码 现在外部页面代码有好的方法拿到这个内部的webviewControl的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

父组件中如何调用子组件的方法:可以定义一个controller类,在controller类中定义和子组件中类型相同的方法,在子组件中将实际封装的方法给到controller。父组件在使用时,new一个controller对象然后转入子类中,在父组件中调用controller对应的方法即可。参考示例如下:

您这边可以在封装的Component中,定义一个方法去调用 webviewController 判断是否有上一页,外部父组件处使用下面示例方式调用子组件方法。

import { webview } from ""@kit.ArkWeb"";

class ChildController {
  //定义一个返回值为boolean的函数 这边的return true 或者false都会被下面的子组件方式替换掉,即相当于给了一个默认的初始值。
  isXXX = (): boolean => {
    return false
  }
}

@Component
struct Child {
  private controller: ChildController = new ChildController();
  webController: webview.WebviewController = new webview.WebviewController();
  aboutToAppear() {
    if (this.controller) {
      //将子组件中的方法注册到ChildController中
      this.controller.isXXX = this.isXXX
    }
  }
  private isXXX = (): boolean => {
    if (this.webController.xx方法判断) {
      return true
    }
    return false
  }
  build() {
    Column() {
      Web({ src: 'www.example.com', controller: this.webController }).height(500)
    }
  }
}

@Entry
@Component
struct Parent {
  ChildRef = new ChildController()
  build() {
    Column() {
      Text('获取Child的exposeMethods!').fontSize('18vp').fontColor(Color.Gray)
      Divider()
      Child({ controller: this.ChildRef })
      Button('Parent调用childer的isXXX').onClick(() => {
        let flag = this.ChildRef.isXXX()
        console.info(flag + "")
      })
    }
  }
}

上述示例中的isXXX 就是Child内部定义的方法,然后再父组件中调用 ChildRef.isXXX()来调用Child中的isXXX()方法。

更多关于HarmonyOS 鸿蒙Next:请教一个问题 我这边现在封装了一个Web的Component 现在Component里面包括webviewController和JsBridge等等的代码 现在外部页面代码有好的方法拿到这个内部的webviewControl的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,如果你已经封装了一个包含webviewControllerJsBridge等组件的Web Component,并且希望外部页面能够获取到这个内部的webviewController,你可以考虑以下几种方法:

  1. 公开接口: 在你的Web Component中定义一个公开的方法或属性,通过这个方法或属性可以返回webviewController的实例。例如,你可以添加一个getWebviewController方法,该方法返回内部的webviewController实例。

  2. 事件机制: 利用鸿蒙系统的事件机制,当Web Component内部需要暴露webviewController时,可以触发一个自定义事件,并将webviewController作为事件的数据传递出去。外部页面监听这个事件并获取数据。

  3. 依赖注入: 如果你的应用架构支持依赖注入,你可以在创建Web Component时,将webviewController作为依赖项注入到组件中。这样,虽然外部页面不能直接访问内部的webviewController,但可以通过控制依赖注入的方式来间接管理它。

请注意,具体实现方式可能因你的应用架构和鸿蒙系统版本而异。如果上述方法仍然无法解决你的问题,请联系官网客服。官网地址是:https://www.itying.com/category-93-b0.html

回到顶部