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事件无效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3中reactive不能直接赋值的解决方案

    vue3中reactive不能直接赋值的解决方案

    这篇文章主要介绍了vue3中reactive不能直接赋值的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue.sync修饰符与$emit(update:xxx)详解

    Vue.sync修饰符与$emit(update:xxx)详解

    这篇文章主要介绍了Vue.sync修饰符与$emit(update:xxx),实现思路非常简单,文章介绍了.sync修饰符的作用和使用.sync修饰符的写法,实现代码简单易懂对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • vue3如何使用vant-picker封装省市二级联动

    vue3如何使用vant-picker封装省市二级联动

    这篇文章主要介绍了vue3如何使用vant-picker封装省市二级联动,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue3中使用Element Plus时el-icon无法显示的问题解决

    Vue3中使用Element Plus时el-icon无法显示的问题解决

    我们的Vue前端一般都是用的ElementUI,其中按钮可能用到的比较多,官方里面有自带的一些默认图标,下面这篇文章主要给大家介绍了关于Vue3中使用Element Plus时el-icon无法显示的问题解决,需要的朋友可以参考下
    2022-03-03
  • vite2打包的时候vendor-xxx.js文件过大的解决方法

    vite2打包的时候vendor-xxx.js文件过大的解决方法

    vite2是一个非常好用的工具,只是随着代码的增多,打包的时候 vendor-xxxxxx.js 文件也越来越大,本文主要介绍了vite2打包的时候vendor-xxx.js文件过大的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 浅谈Vue static 静态资源路径 和 style问题

    浅谈Vue static 静态资源路径 和 style问题

    这篇文章主要介绍了浅谈Vue static 静态资源路径 和 style问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • VUE3中h()函数和createVNode()函数的使用解读

    VUE3中h()函数和createVNode()函数的使用解读

    这篇文章主要介绍了VUE3中h()函数和createVNode()函数的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 简单的Vue SSR的示例代码

    简单的Vue SSR的示例代码

    本篇文章主要介绍了简单的 Vue SSR的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • vue自动化路由的实现代码

    vue自动化路由的实现代码

    这篇文章主要介绍了vue自动化路由的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 详解从新建vue项目到引入组件Element的方法

    详解从新建vue项目到引入组件Element的方法

    本篇文章主要介绍了详解从新建vue项目到引入组件Element的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08

最新评论