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

场景

在使用一些框架如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)就可以正常使用了,自定义传参的数量也没有限制了~

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
在Python中,自定义函数默认参数可以通过在参数列表中使用赋值操作符(=)来实现。定义函数时,可以为参数提供默认值,这样在函数调用时可以省略对应的参数。例如: def greet(name="World"): print("Hello, " + name) 上面的代码定义了一个名为greet的函数,它有一个默认参数name,如果在函数调用时没有提供参数,将使用默认值"World"。可以通过以下方式调用函数: greet() # 输出:Hello, World greet("John") # 输出:Hello, John 在函数定义中,将默认值直接赋给参数,可以轻松地知道哪些参数默认值。对于Python内置函数或第三方提供的函数,可以查看它们的文档或源代码来获取参数默认值信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [python:函数中的默认参数](https://blog.csdn.net/zhizhengguan/article/details/120641743)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [python-自定义函数(定义调用、默认参数、返回值)](https://blog.csdn.net/likinguuu/article/details/130945923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值