在开启TopNav
需要点击主菜单时,想默认跳转到第一个子菜单可以在handleSelect
事件处理。
// 菜单选择事件处理函数
handleSelect(key, keyPath) {
// 将当前选中的菜单项保存到this.currentIndex中
this.currentIndex = key;
// 判断当前菜单项是否为外部链接(以http或https开头)
if (this.ishttp(key)) {
// 如果是外部链接,则在新窗口中打开该链接
window.open(key, "_blank");
} else if (key.indexOf("/redirect") !== -1) {
// 如果是重定向路径(以/redirect开头),则在内部打开该链接
// 将/redirect替换为空字符串,获取真实路径
this.router.push({ path: key.replace("/redirect", "") });
} else {
// 如果是普通菜单项
// 显示左侧联动菜单
this.activeRoutes(key);
// 根据选中的菜单项,获取其子菜单列表
let myRoutes = [];
if (this.childrenMenus && this.childrenMenus.length>0) {
this.childrenMenus.map((item) => {
if (key == item.parentPath || (key == "index" && "" == item.path)) {
myRoutes.push(item);
}
});
}
// 切换路由
setTimeout(() => {
// 如果第一个子菜单的路径不等于当前路由路径,则替换当前路由为第一个子菜单的路径
if (myRoutes[0].path != this.route.path) {
this.router.replace({
path: myRoutes[0].path
})
} else {
// 如果第一个子菜单的路径等于当前路由路径,则替换当前路由为/index路径
this.router.replace({
path: '/index'
})
}
}, 100)
}
},
代码解析:
–handleSelect(key, keyPath)
:菜单选择事件处理函数,接收两个参数,key
为选中的菜单项的唯一标识,keyPath
为菜单项的路径。
–this.currentIndex = key;
:将当前选中的菜单项保存到this.currentIndex
中,用于后续逻辑处理。
–this.ishttp(key)
:判断当前菜单项是否为外部链接,即以http
或https
开头的链接。
–this.$router.push({ path: key.replace("/redirect", "") })
:如果菜单项的路径以/redirect
开头,则在内部打开该链接,将/redirect
替换为空字符串,获取真实路径,然后使用this.$router.push()
方法跳转至该路径。
–this.activeRoutes(key)
:显示左侧联动菜单,根据选中的菜单项激活对应的左侧菜单项。
–myRoutes
:根据选中的菜单项获取其子菜单列表。
–this.$route.path
:获取当前路由的路径。
–this.$router.replace()
:替换当前路由路径为指定的路径。
powered by kaifamiao