如何阻止<router-link>将用户发送到另一个页面?

时间:2017-06-29 02:35:33

标签: vue.js vuejs2

我有这样的逻辑:用户是V2使用用户到subHeaderRouter.router中的网址。如果用户未启动this.openModal

<router-link
  v-for="subHeaderRouter in subHeaderRouters"
  :to="subHeaderRouter.router"
  @click="handleOpenModal()">
</router-link>

handleOpenModal () {
  if (this.IsV2User) return
  this.openModal('changeUserType', 'user.changeUserType')
}

我现在唯一需要做的就是停止:to然后她的用户不是V2。怎么做到这一点?

2 个答案:

答案 0 :(得分:12)

您可以通过指定无事件来监听和手动处理<router-link>事件来阻止默认click行为:

<router-link
  v-for="subHeaderRouter in subHeaderRouters"
  event=""
  :to="subHeaderRouter.router"
  @click.native.prevent="handleOpenModal(subHeaderRouter.router)"/>
handleOpenModal(route) {
    if (this.IsV2User) {
        this.$router.push(route)
    } else {
        this.openModal('changeUserType', 'user.changeUserType')
    }
}

答案 1 :(得分:0)

Vue 3 解决方案

在 Vue3 中,event 已从 "<router-link> 变为 removed,您需要改用 v-slot API


 <router-link :to="yourRoute" custom v-slot="{ href, navigate }">
    <a v-if="yourBoolean" @click="handleEvent()">Run the function</a>
    <a
        v-else
        :href="href"
        @click="navigate">
        Go to route in "to"
    </a>
</router-link>

// Vue 3 Composition API

export default {  
    setup() {
        const handleEvent = () => {
            
           // Add your logic here
      
        }
    }
};

快乐编码! ?