如何在函数的默认传参之外额外传入自定义参数

场景

在使用一些框架如element-ui时,经常会使用一些组件的默认事件,这些默认事件通常会有一些默认参数以便于使用。
例如:
远程搜索功能的自动补全输入框

<el-autocomplete></el-autocomplete>

它经常会被这样使用:

<el-autocomplete
            v-model="modalData[index].unit"
            :fetch-suggestions="querySearch"
            placeholder="请选择"
            ref="input1"
            :highlight-first-item="true"
            @select="handleSelect"
>
            <i class="el-icon-arrow-down el-input__icon" slot="suffix"></i>
            <template slot-scope="{ item }">
                <div class="name">{{ item.name }}</div>
            </template>
</el-autocomplete>

其中的handleselect函数有默认回调参数“选中建议项”,而querySearch函数有两个默认回调(queryString,cb)
正常使用时html中可不传入这两个参数,js中直接使用。即:

@select="handleSelect"

handleSelect(item) {
	console.log(item)
}

而有时,el-autocomplete是通过如v-for等方式渲染出来的、有多个并列输入框时,我们就想知道,所查询的或点击的是哪一个,也即传入自定义参数index。

在这种情况下,像下面这么写肯定是不行的:

@select="handleSelect(index)"
@select="handleSelect(index,item)"

因为这样index和item都会被当成自定义参数,从而在函数中无法使用默认的回调参数。

解决办法:

方法一:

@select="handleSelect(index,$event)"

<script>
handleSelect(index, item) {
	console.log(index)
    console.log(item);
}
</script>

此处的index为自定义参数,item为原默认回调参数,可正常使用。

但是,如果默认回调参数(也即fetch-suggestions)有两个咋办呢?请看方法二。

方法二:

使用闭包:

:fetch-suggestions="((queryString,cb)=>{queryUnit(queryString,cb,index)})"

<script>
	queryUnit(queryString, cb, index) {}
</script>

此时,两个默认回调(queryString,cb)就可以正常使用了,自定义传参的数量也没有限制了~

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值