vue3系列——父组件接收子组件方法传递多个参数时追加参数

百度了很久都没有找到,使用vue3时,父组件接受多个子组件参数时再追加参数怎么写。以下为自己的突发奇想,记录一下,如果有更好的方法也可以在提出,共同学习。

VUE3

子组件

<template>
	<view class="">
		<view class="" @click="handleClick">1</view>
		<view class="" @click="handleClick2">2</view>
	</view>
</template>

<script setup>
const emit = defineEmits(['handleOneArg', 'handleArgs']);
const handleClick = () => {
	emit('handleOneArg', '1');
};

const handleClick2 = () => {
	emit('handleArgs', '1', '2');
};
</script>

传递单值与vue2一致。
传递多值可以参考如下写法:

父组件

<template>
	<view class="content">
		<test-component @handleOneArg="getOneArg($event, 'newArg')" @handleArgs="(...args) => getArgs(...args, 'newArgs')"></test-component>
	</view>
</template>

<script setup>
import TestComponent from './components/test-component.vue';
const getOneArg = (arg, addArg) => {
	console.log(arg, addArg);
};
const getArgs = (arg1, arg2, addArg) => {
	console.log(arg1, arg2, addArg);
};
</script>

此处因为我要直接获取所有字符串,所以使用@handleArgs="(...args) => getArgs(...args, 'newArgs')"的写法。
如果要跟vue2一样获取一个args数组,可以使用@handleArgs="(...args) => getArgs(args, 'newArgs')"的写法,不解构。

以下附上vue2写法,便于查看差异。

VUE2

子组件

<template>
	<view class="">
		<view class="" @click="handleClick">1</view>
		<view class="" @click="handleClick2">2</view>
	</view>
</template>

<script>
export default {
	methods: {
		handleClick() {
			// 传递单值
			this.$emit('handleOneArg', '1');
		},
		handleClick2() {
			// 传递多值
			this.$emit('handleArgs', '1', '2');
		}
	}
};
</script>

传递单值时,父组件可以使用$event代替子组件传入的值。
传递多值时,父组件可以通过arguments字段,该字段为子组件传入的值组成的数组。
具体示例如下:

父组件

<template>
	<view class="content">
		<test-component @handleOneArg="getOneArg($event, 'newArg')" @handleArgs="getArgs(arguments, 'newArgs')"></test-component>
	</view>
</template>

<script>
import TestComponent from './components/test-component.vue';
export default {
	components: {
		TestComponent
	},
	methods: {
		getOneArg(arg, addArg) {
			console.log(arg, addArg); // 1 newArg
		},
		getArgs(arg1, addArg) {
			console.log(arg1, addArg); // ['1','2'] 'newArgs'
		}
	}
};
</script>

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值