HarmonyOS 父组件引用子组件,父组件调用子组件方法函数?

父组件点击按钮,子组件计时器开始,点击按钮,子组件计时器结束

阅读 492
1 个回答

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

@Component
struct Child {
  private controller: ChildController = new ChildController();
  @State intervalId: number = 0;

  aboutToAppear() {
    if (this.controller) {
      this.controller.start = this.start
      this.controller.stop = this.stop
    }
  }

  start() {
    console.log('======start=======')
    this.intervalId = setInterval(() => {
      console.info("输出时间:" + new Date())
    }, 2000)

  }

  stop() {
    console.log('======stop=======')
    clearInterval(this.intervalId);
  }

  build() {
    Column({ space: 10 }) {
      Button("Child中的start").onClick(() => {
        this.start()
      })
      Button("Child中的stop").onClick(() => {
        this.stop()
      })
    }
  }
}

class ChildController {
  stop = () => {
  }
  start = () => {
  }
}

export let ChildRef = new ChildController()

@Entry
@Component
struct Parent {
  @State noShow: boolean = false
  @State intervalId: number = 0

  build() {
    Column({ space: 10 }) {
      Child({ controller: ChildRef })

      Divider()

      Button('Parent调用Child的start').onClick(() => {
        ChildRef.start()
      })
      Button('Parent调用Child的stop').onClick(() => {
        ChildRef.stop()
      })
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进