vant2里面页面刷新默认选中的跟路由地址一样怎么写
时间: 2024-03-13 16:45:24 浏览: 13
如果你想要在页面刷新后默认选中与路由地址相同的菜单项,可以在 `router/index.js` 中监听路由变化,然后在 `mounted()` 钩子函数中调用一个方法来设置当前激活的菜单项。
具体代码如下所示:
```javascript
// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
const router = new Router({
routes: [
{
path: '/',
name: 'Home',
component: () => import('@/views/Home.vue')
},
{
path: '/about',
name: 'About',
component: () => import('@/views/About.vue')
}
],
mode: 'history'
})
router.beforeEach((to, from, next) => {
// 设置当前激活的菜单项
const activeMenu = to.path
setDefaultActiveMenu(activeMenu)
next()
})
// 设置默认激活的菜单项
function setDefaultActiveMenu(activeMenu) {
const menuItems = document.querySelectorAll('.van-sidebar__nav-item')
for (let i = 0; i < menuItems.length; i++) {
const menuItem = menuItems[i]
if (menuItem.getAttribute('to') === activeMenu) {
menuItem.classList.add('van-sidebar__nav-item--active')
} else {
menuItem.classList.remove('van-sidebar__nav-item--active')
}
}
}
export default router
```
在上面的代码中,我们监听了 `beforeEach` 路由钩子函数,在每次路由变化时调用 `setDefaultActiveMenu` 方法来设置当前激活的菜单项。这个方法会通过 `querySelectorAll` 方法获取到所有的菜单项,然后遍历每个菜单项,判断它是否与当前路由地址相同,如果相同则为它添加 `van-sidebar__nav-item--active` 类,否则移除该类。
最后,我们需要在侧边栏组件的 `mounted()` 钩子函数中触发一次 `setDefaultActiveMenu` 方法,以确保在页面刷新后默认选中与路由地址相同的菜单项。
```html
<!-- Sidebar.vue -->
<template>
<div class="sidebar">
<van-sidebar>
<van-sidebar-item to="/" class="sidebar-item">
首页
</van-sidebar-item>
<van-sidebar-item to="/about" class="sidebar-item">
关于我们
</van-sidebar-item>
</van-sidebar>
</div>
</template>
<script>
export default {
mounted() {
// 触发一次设置默认激活的菜单项
const activeMenu = this.$route.path
setDefaultActiveMenu(activeMenu)
}
}
</script>
```
在上面的代码中,我们在 `Sidebar.vue` 组件的 `mounted()` 钩子函数中调用了 `setDefaultActiveMenu` 方法,并传入了当前路由地址,以确保在组件挂载后默认选中与路由地址相同的菜单项。