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