1、事件绑定

在微信小程序中,事件的绑定依附于组件,当事件触发时,就会执行事件对应的处理函数。

我们回到前几章中的例子,将index页面调整为首页(app.json中调整pages数组元素的顺序),此时我们希望,点击页面中的“Hello World”字样,能够跳转到我们之前写的Welcome页面中去:

首先来说明一下事件的绑定形式:
  • 事件绑定依附于组件,所以其绑定的写法和组件的属性写法是类似的,以key、value形式
  • key以bind或catch开头并跟上事件类型,如bindtap、catchtap,也可以使用冒号如bind:tap、catch:tap
  • value是一个字符串,对应Page中同名的函数

原来的wxml中HelloWorld对应的组件代码为:

<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
3
 
1
<view class="usermotto"> 
2
    <text class="user-motto">{{motto}}</text>
3
</view>

那么我们要绑定点击事件的话,则该代码变为:

<view class="usermotto">
<text class="user-motto" catchtap="onTextTap">{{motto}}</text>
</view>
3
 
1
<view class="usermotto">
2
    <text class="user-motto" catchtap="onTextTap">{{motto}}</text>
3
</view>

同时,在index对应js文件中Page,需要增加同名的函数用以处理事件,即这里的“onTextTap”,跳转功能的话,可以通过API文档看到,使用wx.navigateTo方法即可:

 
这样一来就实现了我们的目的,点击HelloWorld字样,跳转到welcome页面。

2、事件分类

事件分为冒泡事件和非冒泡事件:
  • 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递
  • 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递

所谓事件向父节点传递,即子元素上事件的触发,会继续传递导致父元素事件的触发。而之前绑定事件的两种方式bind和catch的区别也就出现了,bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

如下例中,点击 inner view 会先后调用 handleTap3 和 handleTap2(因为tap事件会冒泡到 middle view,而 middle view 阻止了 tap 事件冒泡,不再向父节点传递),点击 middle view 会触发handleTap2,点击 outer view 会触发handleTap1
<view id="outer" bindtap="handleTap1">
outer view
<view id="middle" catchtap="handleTap2">
middle view
<view id="inner" bindtap="handleTap3">
inner view
</view>
</view>
</view>
9
 
1
<view id="outer" bindtap="handleTap1">
2
  outer view
3
  <view id="middle" catchtap="handleTap2">
4
    middle view
5
    <view id="inner" bindtap="handleTap3">
6
      inner view
7
    </view>
8
  </view>
9
</view>

目前微信小程序中提供了12种常见冒泡事件,比如我们常用的点击事件tap就是冒泡事件,其他的都是非冒泡事件。
 

3、数据绑定

在微信提供demo的index页面中,我们可以看到,HelloWorld字样对应的代码片段为 <text class="user-motto">{{motto}}</text> ,而非直接的 <text class="user-motto">Hello World</text>。

这里的双大括号包裹变量,就是数据绑定,变量对应的动态数据来自对应Page的data属性,也就是说这里的motto是变量名,我们在Page的data中可以找到其对应的值,应该是Hello World:
 
那么现在我们使用数据绑定的形式,在welcome页面显示一个nickname,比如“Welcome, Dulk!”,那么首先修改welcome.wxml中text组件内容为数据绑定形式,然后在对应Page的data中给一个同名变量名的值:

<text>Welcome,{{nickname}}!</text>
1
 
1
<text>Welcome,{{nickname}}!</text>
Page({

	data:{
"nickname":"Dulk"
} })
x
 
1
Page({
2
    
3
    data:{
4
        "nickname":"Dulk"
5
    }
6

7
})

可以看到页面的效果了:
 

另外值得一提的是,在组件中某些使用布尔值的属性,需要采用数据绑定的形式,如下例:

<checkbox checked="false"> </checkbox>
1
 
1
<checkbox checked="false"> </checkbox>

以上获取到的checked实际上是true,因为微信中将其false视为了字符串“false”,而字符串转换为布尔值则代表真,所以要使用布尔类型,用数据绑定包裹起来,如希望checked属性为false,则应该如下:

<checkbox checked="{{false}}"> </checkbox>
1
 
1
<checkbox checked="{{false}}"> </checkbox>

4、数据传递

现在我们希望页面的某些属性值能进行传递,这是很常见的常见,比如一个信息列表,点击不同的信息以查看详情,你总得通过不同的id来进行跳转吧,这就需要用到数据传递了。

现在我们希望HelloWorld点击时,传递一个数值如999到welcome页面进行显示,需要这样做:
  • 将999传递到事件函数中
  • 在事件函数中把999传递给welcome页面

4.1 将自定义属性值传递到事件函数中

在组件中,可以自定义数据,而书写的方式则为:以 data- 开头,多个单词由连字符 - 链接,大写无效,到函数中会自动转为小写驼峰式命名。如 data-element-type,在函数中获取到的属性名称会被转换为 elementType。而该属性,会存在于事件函数的事件对象event的currentTarget对象的dataset属性中。

那么要传递数值999,我们可以这样:

<text class="user-motto" catchtap="onTextTap" data-number="999">{{motto}}</text>
 
1
<text class="user-motto" catchtap="onTextTap" data-number="999">{{motto}}</text>

而在事件函数中,我们可以这样获取:
 

4.2 将函数中的值传递到另一个页面

现在我们获取到了value,我们可以通过url?param=的方式,将参数传递到另一个页面,而在另一个页面的onLoad函数的options参数中,会自动获取到,如下index.js中:

相对的,在welcome页面的Page中:

 

4.3 动态绑定数据和页面显示

接下来就是之前熟悉的操作了,将值放入到data中,然后页面用动态绑定:
 
 
页面效果也就有了,如下图:
 

微信小程序开发 [03] 事件、数据绑定和传递的更多相关文章

  1. 微信小程序开发之页面数据绑定

    js:Page( { data:{ parmer:"",             //字符串参数 userinfo:{      userphone:"",   ...

  2. 微信小程序开发系列五:微信小程序中如何响应用户输入事件

    微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...

  3. 零基础入门微信小程序开发

    注:本文来源于:<零基础入门微信小程序开发> 课程介绍 本达人课是一个系列入门教程,目标是从 0 开始带领读者上手实战,课程以微信小程序的核心概念作为主线,介绍配置文件.页面样式文件.Ja ...

  4. 微信小程序开发总结(一)

    微信小程序从2016年9月21日开始内测 ,以及在2017年1月9号正式发布也有一段时间了, 很多人开始拥抱微信小程序,我也是一样 ,从微信小程序内测开始就加入进来 , 开始研究微信小程序 ,属于最早 ...

  5. 这是一篇满载真诚的微信小程序开发干货

    1月9日零点刚过,张小龙与团队正式发布微信小程序.它究竟能在微信8.5亿用户中牵动多少人,现在还很难说.但对于创业者来讲,小程序无疑带来了新契机,以及服务“上帝”们的新方式. 从今天起,只要开发者登录 ...

  6. 初尝微信小程序开发与实践

    这可能是一个java程序员最不务正业的一次分享了. 小程序的火热相信不用我多说了,年初的时候老婆去浦东某达面试,甚至都被问有没有小程序测试经验.俨然小程序成为了互联网公司自PC,WAP,安卓,IOS之 ...

  7. 《腾讯游戏人生》微信小程序开发总结

    为打通游戏人生擂台赛与线下商家的O2O衔接,同时响应时下日臻火热的微信小程序,项目团队决定也开发一款针对性的微信小程序,以此方便商家在我们平台入驻并进行擂台赛事的创建和奖励的核销,进一步推广擂台赛的玩 ...

  8. 微信小程序开发教程(八)视图层——.wxml详解

    框架的视图层由WXMKL(WeiXin Markup language)与WXSS(WeiXin Style Sheet)编写,由组件进行展示. 对于微信小程序而言,视图层就是所有.wxml文件与.w ...

  9. 微信小程序开发入门与实践

    基础知识---- MINA 框架 为方便微信小程序开发,微信为小程序提供了 MINA 框架,这套框架集成了大量的原生组件以及 API.通过这套框架,我们可以方便快捷的完成相关的小程序开发工作. MIN ...

随机推荐

  1. pgAdmin4 ubuntu python 安装

    ubuntu安装pgAdmin4,通过python的pip 安装 pgAdmin4.(首更时间20161205) 新版本的pgAdmin4目前支持mac/window/linux/python,可是l ...

  2. Cobalt Strike 学习

    前言 本文以一个模拟的域环境为例对 Cobalt Strike 的使用实践一波. 环境拓扑图如下: 攻击者(kali) 位于 192.168.245.0/24 网段,域环境位于 192.168.31. ...

  3. JSP基本语法总结【1】(jsp工作原理,脚本元素,指令元素,动作元素)

    时隔半年,回头对jsp复习整理一下,温故而知新. jsp工作原理: jsp服务器管理jsp页面分两个阶段:转换阶段(translation phase)和执行阶段(execution phase). ...

  4. 【python】python中的json、字典dict

    定义 python中,json和dict非常类似,都是key-value的形式,而且json.dict也可以非常方便的通过dumps.loads互转.既然都是key-value格式,为啥还需要进行格式 ...

  5. 一致性Hash(Consistent Hashing)原理剖析

    引入 在业务开发中,我们常把数据持久化到数据库中.如果需要读取这些数据,除了直接从数据库中读取外,为了减轻数据库的访问压力以及提高访问速度,我们更多地引入缓存来对数据进行存取.读取数据的过程一般为: ...

  6. php编译安装 报错 make ***[libphp5.la] Error 1解决方法

    报错信息: /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [libphp5.la] Err ...

  7. TSQL使用ADHOC访问Excle文件

    如题,今天正好碰到这个问题,现将相关知识点记录如下: --开启高级配置功能 reconfigure --开启导入功能 reconfigure --允许在进程中使用ACE.OLEDB.12 --允许使用 ...

  8. python之demo2----改编自python官方提供的turtle_yinyang.py画阴阳的demo

    """ 执行 python -m turtledemo 命令查看系统内置demo的源码 绘制:需要通过import turtle引入绘制图形库turtle库 改编自pyt ...

  9. FFmpeg实现监控摄像头的RTSP协议转RTMP协议直播

    文章来源:http://www.cuplayer.com/player/PlayerCode/RTSP/2014/0706/1419.html FFmpeg实现监控摄像头的RTSP协议转RTMP协议直 ...

  10. 分享一个基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具

    soar-web 基于小米 soar 的开源 sql 分析与优化的 WEB 图形化工具,支持 soar 配置的添加.修改.复制,多配置切换,配置的导出.导入与导入功能. 环境需求 python3.xF ...