Vue对Element中的el-tag添加@click事件无效的解决

 更新时间:2023年05月31日 11:14:57   作者:Cosolar  
本文主要介绍了Vue对Element中的el-tag添加@click事件无效的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我今天又犯了同样的错误,虽然知道Vue对Element中的el-tag添加@click事件无效,但是又忘记了,开始各种搜索,找到原因,通过查阅资料发现官方给定了解答。写个小笔记吧,免得以后不长心。
其实我们在Vue和Element组件库的日常开发中,时常遇到需要给组件添加事件响应的场景。无论是在Vue单文件组件(Single-file-components)中,还是在使用Element UI组件库开发界面时,都会遇到为组件添加点击事件响应的需求。

在使用Vue+Element开发时,我们很容易会遇到这样的问题,就是 @click 事件没有被触发。下面我们一起探究一下这个问题的产生原因以及解决方法。

一、问题的发现

在使用Element UI组件库时,我们有时会需要给 el-tag 标签添加 @click 的点击事件响应,但是当我们尝试这样做时,发现点击事件根本没有被触发。

<el-tag @click="handleTagClick">标签</el-tag>
export default {
  methods: {
    handleTagClick() {
      console.log('tag clicked');
    }
  }
}

上面这段代码看起来应该没有任何问题,但是实际运行时却发现点击事件并没有生效。
那么,这个问题是怎么产生的呢?

二、问题产生的原因

Vue对事件的定义是通过 $on 方法来注册的,而Element组件库中的大部分组件都是由多个子组件组成的,这也就导致了在某些组件上添加事件监听器时,可能并不是我们期望的元素上被绑定了相应的事件。

比如,我们在 el-tag 组件上添加 @click 事件监听器时,实际上会被绑定到内部子元素上,而不是我们期望的 el-tag 标签本身。这个内部子元素是一个 <span> 元素,它包含了 el-tag 组件的全部内容。所以当我们点击 el-tag 标签时,实际上是在点击它内部的 <span> 元素,而不是 el-tag 标签本身。因此,我们需要将 @click 事件绑定到该 <span> 元素上。
那么问题来了,怎么才能获取到该 <span> 元素呢?

三、给出解决方法

Vue提供了一种特殊的修饰符 .native ,可以让我们将事件绑定到组件的根元素上。

修改代码如下:

<el-tag v-on:click.native="handleTagClick">标签</el-tag>
export default {
  methods: {
    handleTagClick() {
      console.log('tag clicked');
    }
  }
}

我们使用 .native 修饰符,将点击事件绑定到了 el-tag 组件的根元素上,即该组件内部的第一个元素 <span> 上。这样一来,当我们点击 el-tag 标签时,就会触发handleTagClick 方法。
上述做法将事件绑定到了组件的根元素上,可以有效地解决 el-tag 组件的点击事件不被触发的问题。

除了使用 .native 修饰符之外,还有其他一些方法可以解决 el-tag 组件的点击事件无效的问题。例如,我们可以通过在 mounted 周期钩子函数中获取该 <span> 元素,然后手动给它添加 click 事件。不过相对来说这种方法比较繁琐,不太建议使用。

四、小结一下

以上就是关于 Vue 对 Element 中的 el-tag 添加 @click 事件无效的问题的详细解决方案,通过使用 .native 修饰符可以轻松解决这个问题。

但需要注意的是,.native 修饰符只对原生的 HTML 元素才有效,而对于自定义组件则无效。

同时,在实际开发中,我们还需要根据需求选择合适的方式来为组件添加事件响应。

到此这篇关于Vue对Element中的el-tag添加@click事件无效的解决的文章就介绍到这了,更多相关Element el-tag添加@click事件无效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中使用swiper,左右箭头点击没有效果问题及解决

    vue中使用swiper,左右箭头点击没有效果问题及解决

    这篇文章主要介绍了vue中使用swiper,左右箭头点击没有效果问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue做移动端适配最佳解决方案(亲测有效)

    vue做移动端适配最佳解决方案(亲测有效)

    这篇文章主要介绍了vue做移动端适配最佳解决方案(亲测有效),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vxe-list vue 如何实现下拉框的虚拟列表

    vxe-list vue 如何实现下拉框的虚拟列表

    这篇文章主要介绍了vxe-list vue 如何实现下拉框的虚拟列表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • el-form表单el-form-item验证规则里prop一次验证两个或多个值问题

    el-form表单el-form-item验证规则里prop一次验证两个或多个值问题

    这篇文章主要介绍了el-form表单el-form-item验证规则里prop一次验证两个或多个值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • vue.js template模板的使用

    vue.js template模板的使用

    这篇文章主要介绍了vue.js template模板的使用,用到了4个组件,分别是header.vue,goods.vue,ratings.vue,seller.vue,感兴趣的朋友跟随脚本之家小编一起看看实现代码
    2018-08-08
  • vue之使用echarts图表setOption多次很卡问题及解决

    vue之使用echarts图表setOption多次很卡问题及解决

    这篇文章主要介绍了vue之使用echarts图表setOption多次很卡问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • vuedraggable实现拖拽功能

    vuedraggable实现拖拽功能

    这篇文章主要为大家详细介绍了vuedraggable实现拖拽功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue3 setup的使用和原理实例详解

    vue3 setup的使用和原理实例详解

    这篇文章主要介绍了vue3的setup的使用和原理,结合实例形式详细分析了vue3 setup的基本功能、原理与使用方法,需要的朋友可以参考下
    2023-06-06
  • Vue.js实现网格列表布局转换方法

    Vue.js实现网格列表布局转换方法

    下面小编就为大家带来一篇Vue.js实现网格列表布局转换方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 详解VUE 定义全局变量的几种实现方式

    详解VUE 定义全局变量的几种实现方式

    本篇文章主要介绍了VUE 全局变量的几种实现方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论