微信小程序 服务器触发事件,微信小程序组件间通讯与事件

##组件间通讯与事件

一、前言

如果小程序中有可复用的UI且具有一定的功能性,就可以使用自定义组件将其封装起来。(如果仅仅只需要复用UI可使用template)下面介绍父子组件的数据传递方法,以及一个简单的组件和一个复杂的组件示例。

【由于刚开始写这篇文章的时候我还算是一个小程序的新手,自己看着官方文档研究并整理归纳的,有很多不足以及错误的地方。在经过一年的沉淀以后(虽然这一年我主要在写vue而不是小程序),我决定重新整理这篇浏览量比较大的文章,以免新手因我的文章走了弯路。】

如何实现小程序自定义组件间的通讯呢?

小程序自定义组件之间是进行相互嵌套的,嵌套之后的组件树需要经过数据进行通讯,组件树之间的数据传递是自上而下或者是自下而上的,是一个单向的数据流转,每一次数据传递都是从最上面的父级组件一层层向下传递。

小程序的组件是按照voe组件进行设计的, 每一个组件都有一个Probs接口,组件的数据都放在父级组件里面,在父级组件进行数据访问,然后通过子组件的接口向下传递,这样就把一个数据从父级组件传递到了子组件。

a199af73b1654237093830df9c2af95e.png

当子组件一内部有一个删除按钮,需要删除一组数据时,要删除的并不是子组件一中的数据,而是父组件里面的数据,这样就需要把“删除数据”这个事件传递到最外层的父级组件上。

从子组件将信息传递到父级组件是通过一种事件触发的机制来进行传递,在组件一中触发一个事件,这个事件的监听放在组件二中,就是说组件二绑定一个事件,当在组件一中触发这个事件传递参数到组件2绑定事件中,组件二通过一个方法再次触发一个事件,在组件3中也有一个事件监听,当组件二中的触发事件被监听时,在组件3中的回调方法又被执行再次发起事件的触发,再传递到组件四,组件四的事件被触发以后它的回调方法执行,变相的将数据传递到最外层的父级组件上去。

看起来是不是十分繁琐,接下来我通过一个例子来进行说明。

在自定义组件component中建立一个cources课程列表组件,cources组件里面有两个组件:外层是一个list列表组件,内层是一个item内容组件。

在最外层获取数据,然后遍历循环内层组件,假如说有两个删除按钮,当我们要删除内部的数据时我们是不能删除dome的,我们要去删除list里面保存的数据。在itme组件里面通过事件去触发父组件item里面一个事件的绑定,让父组件的回旋方法去删除数据。

9dbd9a0ed54affe3e0cf6f715a24093b.png

qYfiqm.PNG

首先要在list.json文件里注册cources,先注册一个标签c-item,标签的路径是./item

usingComponents": {

"c-item":"./item"

}

然后就可以在list.wxml中使用c-item标签

我们在item.wxml中也使用一个view标签

item子组件中的信息是由list.wxml组件传递过来的,我们传递一个值

那 item组件如何接收呢??

我们需要在子组件的逻辑层item.js文件中的properties属性列表里面定义一个title,类型为string

properties: {

title:{

type:String

}

然后title的属性可以绑定到item.wxml文件中

{{title}}

这样list父组件传递过来的数据就能被item子组件接收。

如果一个页面级组件index要使用cources组件,一样要在index.json文件里面注册

"c-list":"../components/cources/list"

然后再将标签放在index.wxml文件中,这样页面中就会出现“xxx”,这“xxx”是通过list属性列表的wxml文件传递过来的。

子传父又是如何实现的呢??

在list.js文件中定义一个属性列表

YrMz2a.PNG

然后再list.wxml使用标签和wx:for循环进行显示,

6BjIzi.PNG

再在item.wxss文件中定义宽高

.item {

width: 100%;

height: 200rpx;

border-bottom:2rpx dotted gray;

font-size:60rpx

}

.del {

font-size: 60rpx;

color: red

}

界面上会出现如下图

je2MJz.PNG

点击叉号删除信息,但是在组件内部是无法删除掉的,要把删除的在这里插入代码片命令发送到父组件中,让父组件删除list.js文件中的list列表。

那子组件如何触发这个事件呢?

在子组件的item.js文件中定义一个方法

methods:{

delItem(){

console.log("xx")

}

}

然后再在item.wxml中进行绑定

x

在由父组件接收这个事件,在父组件里使用bind绑定一个监听事件,事件名为del,回调方法为delcource。

VJvQjy.PNG

这个回调方法定义在list.js文件中``

methods: {

delCource(e){

console.log("删除了")

}

}

然后子组件触发这个事件(triggerEvent触发list.wxml中的binddel),向父组件传递两个值,

methods: {

delItem(){

console.log(this.data.idx) this.triggerEvent("del",{id:this.data.idx}, {})

}

父组件在list.js文件中接收之后进行删除操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信小程序 handler 是一个处理程序,用于处理微信小程序中的用户请求和事件。它可以通过编写 JavaScript 代码来实现。handler 可以响应小程序中的各种事件,例如用户点击按钮、滑动屏幕、输入文本等。在响应这些事件时,handler 可以读取和修改小程序的数据和状态,以便实现各种功能和交互效果。在编写 handler 时,需要了解小程序的基本架构和 API,以及 JavaScript 的基本语法和编程思想。 ### 回答2: 微信小程序 handler 是指在小程序中负责处理各种事件和请求的函数或方法。它是小程序开发过程中非常关键的一部分,通过 handler 可以实现小程序的各种功能和交互。 在微信小程序中,handler 函数可以分为页面级别的和组件级别的。页面级别的 handler 主要是处理页面中的事件,如点击事件、滑动事件等。当用户在页面上发生了操作,比如点击按钮,handler 函数会被调用执行相应的操作代码,比如跳转到其他页面或发送请求等。 而组件级别的 handler 主要是处理组件内部的事件,比如按钮组件、滑动选择器等,当用户在组件上发生了操作,比如点击了按钮,handler 函数会被调用执行相应的操作代码,比如改变组件的显示状态或发送请求等。 handler 函数可以携带参数,用来传递事件的相关信息或者其他自定义数据。在小程序中,通过事件对象的属性可以获取到事件的详细信息,比如点击事件可以获取到点击的位置、滑动事件可以获取到滑动的距离等。开发者可以利用这些信息来进行相应的逻辑处理和数据操作。 另外,handler 函数还可以与小程序的数据绑定机制结合使用。通过绑定数据和事件,在 handler 函数中可以修改数据的值,从而实现数据的更改和动态展示。 总的来说,微信小程序的 handler 在开发中起到了非常重要的作用,通过它可以实现页面和组件的交互,处理各种事件和请求,以及实现数据的更改和展示,提升了小程序的功能性和用户体验。 ### 回答3: 微信小程序中的 handler,即处理器,是指在小程序中处理用户的请求和业务逻辑的模块。handler负责接收和解析用户发出的请求,然后根据请求的类型和内容进行相应的处理。 handler在小程序的开发过程中扮演了重要的角色。它可以接收用户的点击事件、表单提交、网络请求等各种类型的请求,并根据具体的业务需求进行相应的处理和响应。 对于点击事件的处理,handler可以监听用户的点击操作,例如点击按钮、滑动屏幕等等。当用户进行了相应的操作后,handler会被触发,根据事件的类型和具体的逻辑,来执行相应的操作,例如跳转页面、显示或隐藏某个元素等。 对于表单提交的处理,handler可以监听表单的提交事件,并获取表单中的数据。通过自定义的业务逻辑,handler可以对数据进行处理,例如验证表单的合法性、调用相关接口进行数据提交等。 与服务器的交互也是handler的一项重要任务。通过网络请求的方式,handler可以发起HTTP请求并接收服务器返回的数据。在收到数据后,handler可以对数据进行解析和处理,然后将处理结果渲染到页面上。 总之,微信小程序中的handler是一个灵活且重要的模块,负责处理用户的各种操作和事件,并根据具体的业务需求进行相应的逻辑处理和响应。通过handler,我们可以实现小程序的各种功能,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值