微信小程序父子间组件传参

在小程序的实际开发中,经常会遇到父子间组件的传参问题,父组件里边的内容需要传给组件,以用来渲染页面。所以接下来就围绕父子之间如何传参,给大家演示一下实例。
首先创建组件father和组件son,定义father组件为父组件,son组件为子组件。

父组件向子组件传参
<!--pages/father/father.wxml-->
<view>我是组件A</view>
<view>
		<componentB paramAtoB="{{arr}}"></componentB>
</view>
//arr是在组件father中data的数据,将它传给子组件son,paramAtoB是在子组件中定义传过来的数据的类型

在father.json中引入组件

{
  "usingComponents": {
		"componentB":"../son/son"
	}
}

father.js

	data: {
		arr:[1,2,3,4,5,6]
	},

son.wxml

<view>我是组件B</view>
<view>以下是父组件A传给我的</view>
<view style="color:#0fa">{{paramAtoB}}</view>

son.js

	properties: {
		paramAtoB: Array
	},
	//子组件即在**properties**中定义father组件要传过来的参数类型

传参成功的效果
在这里插入图片描述

子组件向父组件传参

注意:这里我是让子组件给当前调用它的页面传参,和父子组件之间传参稍微有所不同。
要让子组件给父组件传参,需要在父组件引入子组件的时候,加个触发事件
father.wxml
监听的函数myevent就是在子组件中定义的点击触发函数(change)里边的自定义事件。
onMyevent函数就是被子组件触发的时候的函数,获取子组件传来的值

<!--pages/father/father.wxml-->
<view>我是组件A</view>
<view>来自son的参数</view>
	<view style="color:red">{{paramBtoA}}</view>
<view>
		<componentB paramAtoB="{{arr}}" bind:myevent="onMyevent"></componentB>
</view>

father.js

	onMyevent: function(e) {
			this.setData({
				paramBtoA: e.detail.paramBtoA
			})
		},

son.wxml
绑定一个点击事件,触发之后就可以将参数带入父组件

<view>我是组件B</view>
<view>以下是父组件A传给我的</view>
<view style="color:#0fa">	{{paramAtoB}}</view>
<button bindtap="change">向father传入参数</button>

son.js

	methods: {
		change: function() {
			this.triggerEvent('myevent',{paramBtoA:1798})
		}
	}

成功效果
在这里插入图片描述
最后总结一下,当父组件给子组件传参的时候,用的其实就是properties,在子组件中定义父组件传过来的值类型。
当子组件给父组件传参的时候,需要一个触发事件,在子组件中定义一个点击事件,当点击事件触发的时候,产生一个自定义事件,用triggerEvent方法定义,并且携带参数,在父组件中监听这个自定义参数,获取其中的数据,从而实现子组件向父组件传值

### 微信小程序事件处理中的参数传递 在微信小程序中,可以通过特定的方式实现事件处理过程中的参数传递。主要采用`data-*`属性来附加额外的数据,在触发事件时这些数据会被一同发送给对应的事件处理器。 对于按钮点击事件而言,不建议直接尝试向事件绑定处嵌入参数值,如下所示为错误示范: ```html <button bindtap="handletap(-1)"> ``` 正确的做法是在标签内利用`data-`前缀定义自定义属性用于携带想要传输的信息,之后通过事件对象访问该信息[^2]。具体操作可以参照下面的例子: #### HTML部分 ```html <!-- 使用 data-number 属性传递数值 --> <button bindtap="handleTap" data-number="-1">Click Me</button> ``` #### JavaScript部分 ```javascript Page({ handleTap(e) { const number = e.currentTarget.dataset.number; console.log('Received number:', number); // 进一步的业务逻辑... } }) ``` 上述代码片段展示了如何设置以及读取由HTML元素上的`data-*`属性所指定的参数。当用户点击带有此特性的按钮时,关联的方法会接收到一个包含了目标节点详情的对象作为输入;其中就包括了所有以`dataset`形式存在的自定义属性及其对应值[^1]。 此外,在涉及父子组件通信的情况下,还可以借助于`bind:`指令配合具体的事件名称来进行监听并响应来自子组件的通知消息[^4]。例如,如果有一个名为`card`的子组件发出了登录成功的信号,则可以在其上级页面里声明相应的回调机制以便及时作出反应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值