在鸿蒙Next(HarmonyOS NEXT)中,调用UI组件内的方法主要依赖于 ArkTS语言 和 声明式UI范式。以下是核心方法:
1. 使用 $refs 引用组件实例
通过 $refs 获取组件实例,直接调用其方法。
示例代码:
// 定义自定义组件
@Component
struct MyButton {
private count: number = 0
// 组件内部方法
increaseCount() {
this.count++
}
build() {
Button(`点击次数: ${this.count}`)
}
}
// 使用组件并调用方法
@Entry
@Component
struct Index {
@State buttonRef: MyButton | null = null
build() {
Column() {
MyButton()
.ref('myButton') // 设置引用标识
.onClick(() => {
// 通过$refs调用组件方法
this.$refs.myButton?.increaseCount()
})
}
}
}
父组件通过状态变量控制子组件行为。
示例代码:
@Component
struct ChildComponent {
[@Link](/user/Link) triggerAction: boolean
// 监听状态变化执行方法
aboutToAppear() {
this.triggerAction = false
}
onTriggerChange() {
if (this.triggerAction) {
this.doSomething()
this.triggerAction = false // 重置状态
}
}
doSomething() {
console.log('执行子组件方法')
}
build() {
// UI内容
}
}
@Entry
@Component
struct ParentComponent {
@State trigger: boolean = false
build() {
Column() {
ChildComponent({ triggerAction: $trigger })
Button('触发子组件方法')
.onClick(() => {
this.trigger = true
})
}
}
}
3. 使用全局自定义方法
通过公共类或单例模式暴露方法。
示例代码:
// 定义工具类
class ComponentUtils {
static doGlobalAction() {
console.log('全局方法被调用')
}
}
// 在任意组件中调用
Button('调用全局方法')
.onClick(() => {
ComponentUtils.doGlobalAction()
})
注意事项:
- 生命周期管理:确保组件已挂载后再调用方法
- 类型安全:使用可选链操作符(
?.)避免空指针异常
- 状态驱动:优先使用状态变量驱动UI更新,而非直接操作组件
根据具体场景选择合适方案,推荐优先使用状态驱动的方案2,更符合声明式UI的最佳实践。