antd的anchor组件点击锚点导致路由发生变化

测试的同学反映,antd的anchor组件在点击锚点后会修改URL,而单页应用中如果使用哈希模式的路由,当URL被修改后,刷新页面会导致当前路由没有定义而出现404的情况。

原本的路由是

http://localhost:8066/#/home

由于锚点上有href="#"属性,点击之后URL就变成了这样

http://localhost:8066/#/项目模板

这样的路由刷新之后肯定就会出现404的情况,那么需要怎么解决呢?

看了下antd的文档,发现有个click事件

在这里插入图片描述
这个事件的回调函数第一个参数就是事件,那么就通过e.preventDefault()阻止掉默认事件,然后再通过第二个参数拿到点击的href,通过document.getElementById获取到这个元素,然后使用scrollIntoView添加页面滚动效果。

<template>
	<a-anchor class="nav" :getContainer="getContainer" :target-offset="targetOffset" @click="handleClick">
        <a-anchor-link v-for="(item, index) in navList"
                      :href="`#${item}`"
                      :title="item"
                      :key="index"/>
    </a-anchor>
</template>

<script>
export default {
	methods: {
		handleClick(e, link) {
	      // 阻止点击的默认事件修改路由
	      e.preventDefault();
	      if(link.href) {
	        let ele = document.getElementById(link.href);
	        ele && ele.scrollIntoView({block: 'start', behavior: 'smooth'});
	      }
	    }
	}
}
</script>

实际测试发现,调用e.preventDefault()之后,只会阻止URL被修改,并不会阻止点击锚点后的滚动事件。这样的话,那句scrollIntoView就可以不用了。

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值