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

gopyfrb3  于 2022-12-19  发布在  Vue.js
关注(0)|答案(3)|浏览(307)

我有这样一个逻辑:如果用户是V2,则将用户用于subHeaderRouter.router中的url。如果用户不是,则启动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了。如何完成呢?

n3ipq98p

n3ipq98p1#

通过指定不监听默认事件并使用.native修饰符手动处理click事件,可以防止默认<router-link>行为:

<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')
    }
}

如果您觉得event=""很奇怪,那么它也可以使用空属性:

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

egmofgnx2#

Vue 3溶液

在Vue3中,event已从"<router-link>中删除,您将需要使用v槽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
      
        }
    }
};
yftpprvb

yftpprvb3#

我遇到了同样的问题,并使用动态Vue组件作为解决方案。您还必须检查路由器和div标记的样式差异。

<component 
  :is=" condition ? 'router-link' : 'div' "
  @click="handleOpenModal"  
  :to="your_link">
</component>

相关问题