HarmonyOS 鸿蒙Next 自定义组件如何写自定义事件
HarmonyOS 鸿蒙Next 自定义组件如何写自定义事件
自定义组件如何写自定义事件
        
          2 回复
        
      
      
        自定义组件HSCell 中自定义事件tapEvent,通过点击修改数据,实现UI状态的变化
[@Observed](/user/Observed)
class HSItemData {
  choose: boolean = false
  constructor(choose: boolean) {
    this.choose = choose
  }
}
[@Observed](/user/Observed)
class HSTestDataModel {
  itemArray: Array<HSItemData> = new Array()
  constructor(itemArray: HSItemData[]) {
    this.itemArray = itemArray
  }
}
[@Component](/user/Component)
struct HSCell {
  [@ObjectLink](/user/ObjectLink) itemData: HSItemData
  tapEvent?: (item: HSItemData) => void
  build() {
    Row() {
      if (this.itemData.choose) {
        Text("选中")
      }
      else {
        Text("未选中")
      }
    }
    .backgroundColor(Color.Pink)
    .onClick(() => {
      if (this.tapEvent) {
        this.tapEvent(this.itemData)
      }
    })
    .margin({ bottom: 10 })
    .width('100%')
    .height(68)
  }
}
[@Entry](/user/Entry)
[@Component](/user/Component)
export struct HSTestPage {
  listeners: DataChangeListener[] = []
  [@State](/user/State) dataModel: HSTestDataModel = new HSTestDataModel([])
  aboutToAppear(): void {
    for (let i = 0; i < 10; i++) {
      this.dataModel.itemArray.push(new HSItemData(false))
    }
  }
  build() {
    Column() {
      List() {
        LazyForEach(this, (item: HSItemData, index) => {
          HSCell({
            itemData: item, tapEvent: () => {
              item.choose = !item.choose
            }
          })
        }, (item: string) => item.toString())
      }
    }
    .height('100%')
  }
  totalCount() {
    return this.dataModel.itemArray.length
  }
  getData(index: number) {
    return this.dataModel.itemArray[index]
  }
  registerDataChangeListener(listener: DataChangeListener) {
    if (this.listeners.indexOf(listener) < 0) {
      this.listeners.push(listener);
    }
  }
  unregisterDataChangeListener(listener: DataChangeListener) {
    const pos = this.listeners.indexOf(listener);
    if (pos >= 0) {
      this.listeners.splice(pos, 1);
    }
  }
  reloadTableView(): void {
    this.listeners.forEach(listener => {
      listener.onDataReloaded();
    })
  }
}
更多关于HarmonyOS 鸿蒙Next 自定义组件如何写自定义事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next系统中,自定义组件编写自定义事件涉及以下几个关键步骤:
- 
定义事件类型:首先,在自定义组件的Java或Kotlin代码中定义一个新的事件类型,通常使用 Event或其子类。这个事件类需要包含所有需要传递的数据。
- 
发送事件:在组件内部,通过 ComponentContext的sendEvent方法发送自定义事件。这通常发生在用户交互(如点击、滑动等)触发的回调函数中。
- 
接收事件:在父组件或监听该事件的组件中,通过实现 EventListener接口或相应的监听器方法来接收并处理自定义事件。需要在组件的XML布局文件中,通过ohos:event属性绑定事件监听器。
- 
处理事件:在事件监听器的回调函数中处理接收到的自定义事件,执行相应的业务逻辑。 
请确保自定义事件类、发送和接收逻辑正确无误,并且XML布局文件中的事件绑定正确。此外,还需要注意事件传递的数据类型与接收端期望的数据类型一致。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。
 
        
       
                   
                   
                  

