Skip to content

事件系统

事件绑定和事件对象

小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过on的方式绑定事件,也没有click事件,小程序中绑定事件使用bind方法,click事件也需要使用tap事件来进行代替,绑定事件的方式有两种:

  • 第一种方式:bind:事件名,bind后面需要跟上冒号,冒号后面跟上事件名,例如:<view bind:tap="fnName"></view>
  • 第一种方式:bind事件名,bind后面跟上事件名,例如:<view bindtap="fnName"></view>

事件分类以及阻止事件冒泡

  • 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
  • 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
  • 使用bind绑定的事件,会触发事件冒泡,如果阻止事件冒泡,可以使用catch绑定事件。

事件传参

在组件上通过data-*的形式绑定事件处理函数的参数,可以在事件处理函数中通过event.currentTarget.dataset.参数名获取到参数的值。

  • currentTarget事件绑定者,也就是指:哪个组件绑定了当前的事件处理函数。
  • target事件触发者,也就是指:哪个组件触发了当前的事件。
  • 在组件上使用mark:自定义属性的方式将数据传递给事件处理函数,例如:<view mrk:id="100" bindtap="handler">,然后通过事件对象进行获取自定义事件,例如event.mark.name。

setData()

修改对象类型数据

  • 新增单个、多个属性
    this.setData({
      "userInfo.name": "张三",
      "userInfo.age": 18
    })
  • 修改单个、多个属性
    this.setData({
       "userInfo.name": "李四",
    })
    // 修改多个属性可以使用ES6提供的展开运算符和object.assign()方法
    
    const userInfo ={
      ...this.data.userInfo,
      name: "李四",
      age: 18
    }
    this.setData({userInfo})
  • 删除单个、多个属性
    //删除单个属性
    delete this.data.userInfo.name
    this.setData({userInfo:this.data.userInfo})
    
    //删除多个属性
    const {age,test,...rest} = this.data.userInfo
    this.setData({rest})

修改数组类型数据

  • 新增数组元素
    this.data.list.push(4)
    this.setData({list:this.data.list})
    ```
  • 修改数组元素
    this.setData({'list[0]':1})
    this.setData({'list[1].name':'张三'zal})
  • 删除数组元素

知识是财富,分享是快乐!