如何给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 事件出去。
00
相似问题