《鸿蒙HarmonyOS 5.0开发教程》基础篇09:交互事件

313 阅读3分钟

交互事件,指的就是用户与UI组件之间交互操作时触发的事件。

一、事件基础语法

我们以最常见的点击事件为例,来学习 ArkTS 中事件相关语法。

1、绑定事件

通过onClick()方法来给组件绑定点击事件:

Button('按钮').onClick(() => {
  console.log("点击事件")
})

用户点击页面中的按钮时,会执行onClick()方法,在日志中输出“点击事件”。

步骤如下图所示:

image-20250122211815835

2、事件方法

事件方法,指的就是 onClick() 中的回调函数。

事件方法除了可以设置 build() 方法内部以外,也可以在 build() 同级设置函数来作为事件方法,然后通过 this 来访问对应的方法:

@Entry
@Component
struct MyPage {
  // 事件方法
  clickEvent = () => {
    console.log("点击事件")
  }

  build() {
    Column({ space: 10 }) {
      Button('按钮').onClick(this.clickEvent)
      
      Button('按钮').onClick(() => {
        this.clickEvent()
      })
    }
  }
}

说明:事件方法,可以是箭头函数也可以是普通函数,但是考虑到后续方法中 this 的使用,建议使用箭头函数

3、事件传参

事件方法本身是无法实现传参的,因此将需要接收参数的方法(下列中的sayHello)作为普通函数,在真正的事件方法中通过 this 来调用普通函数并传参;

@Entry
@Component
struct MyPage {
  
  sayHello = (name: string) => {
    console.log(`你好,${name}`)
  }

  build() {
    Column() {
      Button('按钮').onClick(() => {
        // 传递参数给sayHello
        this.sayHello("张三")
      })
    }
  }
}

4、事件对象

所有的事件方法都会默认接收一个事件对象 event 作为参数:

注意:event 是一个对象,因此在输出时必须使用JSON.stringify() 转换为字符串后再输出。

@Entry
@Component
struct MyPage {
  clickEvent = (event: ClickEvent) => {
    console.log(JSON.stringify(event))
  }

  build() {
    Column() {
      Button('按钮').onClick((event: ClickEvent) => {
        console.log(JSON.stringify(event))
      })
      Button('按钮').onClick(this.clickEvent);
    }
  }
}

点击按钮后,输出的事件对象内容如下图所示:

image-20250124150627141

二、访问组件方法和状态

在一个事件方法中,是可以通过 this 来访问组件内的其他方法和状态的。

@Entry
@Component
struct MyPage {
  @State message: string = "你好";
  
  clickEvent = () => {
    // 修改组件内部状态
    this.message = "hello"
    // 调用组件内部其他方法
    this.sayHello();
  }
  
  sayHello = () => {
    console.log(this.message);
  }

  build() {
    Column() {
      Button('按钮').onClick(this.clickEvent)
    }
  }
}

三、事件类型

作为初学者,我们比较常用的事件类型就是onClick点击事件,但是我们还是需要大概了解一下ArkTS中总共提供了哪些事件类型,每一个事件具体的使用我们可以在后续的学习中慢慢来了解。

ArkTS 提供的事件类型总分为两大类:通用事件和手势事件。

1、通用事件

通用事件按照触发类型来分类,包括触屏事件、键鼠事件、焦点事件和拖拽事件。

  • 触屏事件:手指或手写笔在触屏上的单指或单笔操作。
  • 键鼠事件:包括外设鼠标或触控板的操作事件和外设键盘的按键事件。
    • 鼠标事件是指通过连接和使用外设鼠标/触控板操作时所响应的事件。
    • 按键事件是指通过连接和使用外设键盘操作时所响应的事件。
  • 焦点事件:通过以上方式控制组件焦点的能力和响应的事件。
  • 拖拽事件:由触屏事件和键鼠事件发起,包括手指/手写笔长按组件拖拽和鼠标拖拽。
  • 事件分发:描述触控类事件(不包括按键,焦点)响应链的命中收集过程。

2、手势事件

手势事件由绑定手势方法和绑定的手势组成,绑定的手势可以分为单一手势和组合手势两种类型,根据手势的复杂程度进行区分。

  • 绑定手势方法:用于在组件上绑定单一手势或组合手势,并声明所绑定的手势的响应优先级。
  • 单一手势:手势的基本单元,是所有复杂手势的组成部分。
  • 组合手势:由多个单一手势组合而成,可以根据声明的类型将多个单一手势按照一定规则组合成组合手势,并进行使用。