如何给el-input绑定原生click事件

来源:5-11 Props --v2.6.11 (一)

rookie_white

2021-02-04

老师你好!
技术栈: vue + element-ui
有这么个场景,我需要给el-input绑定绑定原生事件,但是el-input我是通过component进行渲染的。(不通过@click.native这样写死,因为click事件是动态的)
尝试一
代码如下

# parent.vue
# template

# 这里是标题文字

<component :is="componentName" v-model="value" v-on="on"></component>

# script
data: { value: '', componentName: 'ElInput', on: { click: this.click } },
methods: { click: () => { console.log('click') }} 

ElInput组件的事件如下: 组件没有click事件,所以click事件无效。图片描述
尝试2:
新建一个child.vue文件,如下

#template
<el-input v-on="$listeners" :value="value"></el-input>

#script
props: { value: '' }

将parent.vue的componentName改为Child

# parent.vue
# template
<component :is="componentName" v-model="value" v-on="on"></component>

# script
data: { value: '', componentName: 'Child', on: { click: this.click } },
methods: { click: () => { console.log('click') }} 

但是由于$listeners只包含了组件事件而不包括原生事件,所以也无效
尝试三:
修改child.vue文件,如下

# template
<div v-on="$listeners">
	<el-input v-on="$listeners" v-model="value"></el-input>
<div>

#script
props: { value: '' }

通过div包裹el-input组件,在外层容器也通过v-on="$listeners",监听事件,这样做是可行的。

但是我想知道,有没有不用这种给el-input包裹外层的方法,能够给el-input监听原生的click事件,当然前提是不在模板上写@click.native,谢谢老师!

写回答

1回答

ustbhuangyi

2021-02-04

如果 el-input 本身不支持自定义事件 click,你又不能直接使用 @click.natvie,那么就只能对 el-input 做一层 wrapper 成一个新组件,这个组件支持 click 自定义事件,然后这个组件内部通过 @click.native 监听 el-input 的原生 click 事件,再派发自定义 click 事件出去。

0
0

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程