uni-app入门:常用事件绑定与数据同步

简介: 开始今天的内容之前首先想一个问题:什么叫事件?官方说法:事件是视图层到逻辑层的通讯方式.通俗易懂的说法:每个操作都可以算作一个事件,比如说点击按钮时点击事件、输入文本信息时就是输入事件等等。

开始今天的内容之前首先想一个问题:什么叫事件?官方说法:事件是视图层到逻辑层的通讯方式.通俗易懂的说法:每个操作都可以算作一个事件,比如说点击按钮时点击事件、输入文本信息时就是输入事件等等。


1.常见事件与事件绑定


1.1点击事件bindtap

    手指触摸之后马上离开触发的事件,相当于html中click事件.下面以一个简单示例进行说明:

   index.js中定义点击函数:clickFunction:

Page({
  clickFunction: function() {
    console.log("点击事件生效")
  }
  })


   index.wxml创建按钮标签,使用bindtap属性绑定自定义点击事件函数clickFunction:


<button type="primary" bindtap="clickFunction">按钮</button>

页面点击按钮之后观察控制台输出指定内容说明事件绑定成功:

dc7928c9f1f77624e21c72966bf70c7f_2b0d17551d0b4a5aa084246661115abc.png


1.2 文本输入事件bindinput

    文本框中输入内容之后触发的事件。以一个简单的示例进行讲解:

    index.js中创建inputFcuntion函数,绑定输入事件生效之后输出指定文字内容:


Page({
  // 输入事件
  inputFcuntion: function(){
    console.log("输入内容之后控制台信息打印");
  }
  })


    index.wxml中添加input标签,属性中使用bindinput绑定自定义的输入事件函数:

<view>文本输入区域:</view>
<input type="text" bindinput="inputFcuntion"></input>


    文本中输入内容之后观察控制台有内容输出说明输入事件绑定成功:

b57664716369b50e376f1f9c4ef4fada_ec653520808a4d2ba69c58b77d7fd8aa.png


1.3 切换事件bindtouchend

    状态改变时触发。定义一个多选框,支持选择男和女,进行切换时能实现控制台内容删除.

   index.js中定义事件切换函数:


Page({
  // 切换事件
  changeFcuntion: function(){
    console.log("切换选项之后打印输出内容");
  }
  })


   index.wxml中创建多选框,支持男女切换:


<checkbox-group>
<checkbox bindtouchend="changeFcuntion">男</checkbox>
<checkbox bindtouchend="changeFcuntion">女</checkbox>
</checkbox-group>


   点击切换后观察控制台内容输出:

7fa97b9e67abac20e813e057bb5aa2be_c7924e914b7d4b418d10e8f73c80ed90.png


2.数据同步


   如何实现在视图层与逻辑层进行数据传递,下面通过几个问题以及简单案例来说明实现过程。


2.1事件回调

   当事件回调的时候,js文件所代表的逻辑层会收到一个事件对象event,相关的属性如下,其中最常用的是target和detail属性.

e4128b995cfde881727174c8920176de_bc0a627429bd4d0f8cd9e5aafb3113a7.png


2.2逻辑层中page对象中的中数据如何进行改变

   page中data可以看做是page对象的一个属性,从当前page对象页面获取data中每个定义数据方法:

this.data.data属性名


   当前page对象页面设置data中每个定义数据值的方法:

this.setData({
      data中属性名: this.data.data中属性名+处理逻辑(加减乘除或字符串拼接)
    })


   下面用案例来说明一下如何根据事件来实现page对象中数据变化:

   page对象中定义初始化点击次数:clickNmu,页面上每点击一次按钮,该次数实现加一并打印到控制台.

   index.js中初始化clickNmu并从点击事件中设置clickNmu值:

Page({
  data:{
    // 点击次数
    clickNmu: 0
  },
  // 点击事件
  clickFunction: function(event) {
    this.setData({
      clickNmu: this.data.clickNmu+1
    })
    console.log(this.data.clickNmu);
  }
  })


   index.wxml中按钮添加点击事件:

<button type="primary" bindtap="clickFunction">按钮</button>


   点击按钮之后控制台点击次数进行加一并打印输出:

874bfd623f7190a6cefbfa86da970526_bdc22ae21c7f4a6e919f29365800b79c.png


2.3页面触发事件如何传参到page中数据

   uniapp中页面函数中不支持传递参数,如果需要传递参数需要按照如下格式定义参数名以及参数值:

data-属性名="{{属性值}}"


page对象中获取页面自定义参数值的方式:

事件回调对象event.target.dataset.属性名


通过案例说下如何进行使用:

   2.2中的page对象中初始点击次数默认设置为0,每次点击页面按钮需要将点击次数加5.通过页面传参实现。

   index.wxml中设置点击事件传递参数名initClickNum以及参数值5:

<button type="primary" bindtap="clickFunction" data-initClickNum="{{5}}">按钮</button>
1
    index.js中page对象中重置点击次数:当前点击次数+页面点击事件新增点击次数5:
Page({
  data:{
    // 点击次数
    clickNmu: 0
  },
  // 点击事件
  clickFunction: function(event) {
    this.setData({
      clickNmu: this.data.clickNmu + event.target.dataset.initclicknum
    }),
    console.log(this.data.clickNmu)
  }
  })


   每次点击之后观察控制台输出内容(每次加5):

9c92f66a05971ec40980df1d1fa52e4f_097fc32c4a4b4b498f8554dde0f478af.png

   注意每次加5需要使用差值表达式进行包裹,否则会解析成字符串5,到逻辑层相加就会成为字符串拼接.另外对于page对象中获取自定义属性名会进行去驼峰处理,页面中定义的属性名是initClickNum,实际逻辑层解析出来的是initclicknum.


2.4 文本框中内容如何传递到page中

   以input文本框输入为例将以下如何将文本框输入的内容同步到page对象指定数据中.

   index.js中初始化定义消息属性:msg,文本输入事件中将输入的内容进行拼接,获取文本框中输入内容方式:


事件回调event.detail.value


具体逻辑如下:

Page({
  data:{
    // 文本信息
    msg: 'page对象中的msg信息,拼接页面输入的信息:'
  },
  // 输入事件
  inputFcuntion: function(envet){
    console.log(envet);
    console.log(envet.detail.value);
    console.log(this.data.msg);
    this.setData({
      msg: this.data.msg + envet.detail.value
    })
    console.log(this.data.msg);
  }
  })


   index.wxml中给文本框设置value属性:

<input type="text" bindinput="inputFcuntion" value="你好"></input>

   文本框中输入内容之后观察控制台打印信息:

067236b28bb64b439db02fffd41b2a4e_c17425e518104c41b12d951ea0d66392.png


   补充一个遇到的问题:在实现第一个点击事件时,点击按钮控制台输出如下警告信息:Component “pages/index/index“ does not have a method “ 方法名“ to handle event “tap".这个警告的原因有很多,说下我当时的处理方式:将项目中index.ts文件去除即可.当前项目创建默认生成index.ts,index.js都是手动创建的,出现上面的警告应该是解析文件有误导致的。.ts文件是typescript语言,.js是javascript语言,目前逻辑层都是使用.js文件进行逻辑控制!


相关文章
|
3月前
|
移动开发 JavaScript 小程序
从入门到实践:Uni-app跨平台开发与应用
从入门到实践:Uni-app跨平台开发与应用
139 1
|
3月前
|
移动开发 JavaScript 前端开发
【前后端实战项目】带你从入门到实战全面掌握 uni-app
【前后端实战项目】带你从入门到实战全面掌握 uni-app
|
4月前
|
存储 XML Android开发
Android Studio App开发入门之数据存储中共享参数SharedPreferneces的讲解及使用(附源码 超详细必看)
Android Studio App开发入门之数据存储中共享参数SharedPreferneces的讲解及使用(附源码 超详细必看)
31 0
|
4月前
|
Android开发
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)
35 0
|
4月前
|
XML 监控 Android开发
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
Android Studio App开发入门之文本输入EditText的讲解及使用(附源码 包括编辑框、焦点变更监听器、文本变化监听器 )
114 0
|
2天前
|
NoSQL Redis
Redis入门到通关之Redis主从数据同步原理
Redis入门到通关之Redis主从数据同步原理
|
4月前
|
XML Java Android开发
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
Android Studio App入门之列表视图ListView的讲解及实战(附源码 超详细必看)
90 0
|
4月前
|
XML Java 数据格式
Anrodi Studio App开发入门之网格视图GridView的使用及实战(附源码 超详细必看)
Anrodi Studio App开发入门之网格视图GridView的使用及实战(附源码 超详细必看)
31 0
|
4月前
|
Android开发 iOS开发 容器
Android Studio App开发入门之选择按钮的讲解及使用(包括复选框,开关按钮,单选按钮,附源码)
Android Studio App开发入门之选择按钮的讲解及使用(包括复选框,开关按钮,单选按钮,附源码)
72 0
|
4月前
|
XML 编解码 Android开发
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
48 1