【问题标题】:Vue preventing default router-link behaviour works in Chrome but not in FirefoxVue 阻止默认路由器链接行为在 Chrome 中有效,但在 Firefox 中无效
【发布时间】:2021-10-05 01:34:48
【问题描述】:

我有一个以router-link 作为根标签的组件。我想阻止它的默认链接行为,这样如果 JS 出现问题或它被禁用,它会回退到链接。

我用这样的事件修饰符让它在 Chrome 中工作: @click.native.capture.prevent

但它在 Firefox 中不起作用。 我错过了什么?

Codesandbox

UPD:我找到了解决方法,但我仍然很好奇为什么这不起作用

【问题讨论】:

  • 理想情况下,这应该可以按预期工作。您是否有最小的可测试版本来重现该问题?
  • 对,我忘了。但有趣的是,我刚刚创建了它,它似乎正在工作。所以我还缺少其他东西:(
  • 我会马上弄清楚并更新问题
  • 我已经更新了与路由器行为有关的问题

标签: vue.js firefox vuejs2 dom-events vue-events


【解决方案1】:

似乎 Firefox 对元素上的多个事件的处理方式与 Chrome 不同,这就是您的代码无法按预期工作的原因。在这一点上我不确定,但它可能是 Chrome 从下到上处理所有事件侦听器,而 Firefox 从上到下工作。这导致 Chrome 没有触发第一个事件,因为前一个事件(在本例中为第二个)使用了 prevent default,如下图所示(这只是您使用 @click.native.capture.prevent 添加的事件)。

Chrome 事件处理程序:

Firefox 事件处理程序:

由于 Vue 路由器默认向 router-link 添加点击事件,您可以通过向子组件添加包装器来解决此问题(在这种情况下,router-link 不会捕获该事件,因为包装器防止它)

<div>
  <router-link to="/shop"> text link</router-link>
</div>

或通过手动覆盖event property

&lt;router-link to="/shop" event=""&gt; text link&lt;/router-link&gt;

您可以使用包装器 here 查看它的工作原理。

【讨论】:

  • 谢谢@Aer0。我也找到了两种解决方法,但我想知道这些浏览器之间处理事件的区别是什么。你的解释澄清了事情! :)
  • 很高兴我能帮上忙。老实说,这也让我发疯了,因为我不知道会有这么简单的区别。也学到了一些新的东西,所以这是一个完全的胜利:胜利。 :-)
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2016-02-19
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多