使用"v-on:"指令 - VueJS将事件侦听器添加到<router-link>组件

Evg*_*nko 28 vue.js vue-router vuejs2

我试图自定义处理程序添加InlineButtonClickHandler<router-link>组件的click事件,这样我就可以发出一个自定义appSidebarInlineButtonClick事件.

但是,我的代码不起作用.我究竟做错了什么?

<template>
   <router-link :to="to" @click="InlineButtonClickHandler">
     {{ name }}
   </router-link>
</template>

<script type="text/babel">
export default {
  props: {
    to: { type: Object, required: true },
    name: { type: String, required: true }
  },
  methods: {
    InlineButtonClickHandler(event) {
      this.$emit('appSidebarInlineButtonClick');
    }
  }
} 
</script>
Run Code Online (Sandbox Code Playgroud)

tha*_*ksd 68

您需要添加.native修饰符:

<router-link
    :to="to"
    @click.native="InlineButtonClickHandler"
>
    {{name}}
</router-link>
Run Code Online (Sandbox Code Playgroud)

这将侦听router-link组件的根元素的本机click事件.

  • 据我所知,v-on:click.native 现在已被弃用 (6认同)
  • 鉴于 Vue.js 3 中已弃用“@click.native”,另一种选择是使用样式为链接的按钮,并在其 @click 方法中调用 this.$router.push({ path: 'to' }) ; (5认同)
  • ```@click.native``` 或 ```v-on:click.native``` 现已在新版本的 VueJS (&gt;=3) 中弃用,请使用 ```@click.prevent``` 代替。 (2认同)

小智 8

<router-link:to="to">
    <span @click="InlineButtonClickHandler">{{name}}</span>
</router-link>
Run Code Online (Sandbox Code Playgroud)

也许你可以试试这个。

  • 这将无法访问,因为键盘用户永远无法激活“@click”事件 (2认同)