有时在页面刷新或者返回等操作时,想监听路由变化进行数据更新等操作。那么在vue3中怎么对路由进行监听呢?这里为大家提供了这两种方法:
效果:
- watch监听
const barNav=ref([]) const navMainList = ref([ { name: "首页", id: 1, path:"/AchievementsIndex", }, { name: "成果转化", id: 2, path:"/AchieveMents", child:[ { name: "发布需求", id: 2-1, path:"/AchieveMents" }, { name: "发布成果", id: 2-2, path:"/AchieveMents" }, { name: "需求检索", id: 2-3, path:"/AchieveMents" }, { name: "成果检索", id: 2-4, path:"/AchieveMents" } ] }, { name: "专利转让", id: 3, path:"/patented", child:[ { name: "专利发布", id: 3-1, path:"/AchieveMents" }, { name: "专利筛选", id: 3-2, path:"/AchieveMents" }, { name: "转让指南", id: 3-3, path:"/patentedGuide" } ] }, { name: "互动交流", id: 4, path:"/InteractiveCommunication", }, { name: "专家资源库", id: 5, path:"/expertResourct", }, { name: "新闻中心", id: 6, path:"/newsCenter", child:[ { name: "政策法规", id: 6-1, path:"/AchieveMents" }, { name: "新闻资讯", id: 6-2, path:"/newsDetail" }, { name: "通知公告", id: 6-3, path:"/AchieveMents" } ] }, { name: "中心介绍", id: 7, path:"/PromotionCenter", }, ]); const navMainListNew = ref([ { name: "首页", id: 1, path:"/AchievementsIndex", }, { name: "成果转化", id: 2, path:"/AchieveMents", child:[ { name: "发布需求", id: 2-1, path:"/AchieveMents" }, { name: "发布成果", id: 2-2, path:"/AchieveMents" }, { name: "需求检索", id: 2-3, path:"/AchieveMents" }, { name: "成果检索", id: 2-4, path:"/AchieveMents" } ] }, { name: "专利转让", id: 3, path:"/patented", child:[ { name: "专利发布", id: 3-1, path:"/AchieveMents" }, { name: "专利筛选", id: 3-2, path:"/AchieveMents" }, { name: "转让指南", id: 3-3, path:"/patentedGuide" } ] }, ]); onMounted(()=>{ barNav.value=navMainList.value }) watch(() =>router.currentRoute.value.path,(newValue,oldValue)=> { if (newValue == "/askQuestions") { barNav.value=navMainListNew.value } if (oldValue == "/askQuestions") { barNav.value=navMainList.value } },{ immediate: true })
(思路:首先页面导航绑定一个空的导航数组,然后mounted阶段直接把一个数组赋值给这个空的barNav,然后监听路由的改变,当进入askQuestion路由的时候,把新的导航赋值给barNav,当离开这个路由的时候,把之前的那个数组再次赋值给barNav)
- onBeforeRouteUpdate路由守卫
import { useRouter,onBeforeRouteUpdate } from 'vue-router'; let router = useRouter() onBeforeRouteUpdate((to) => { // console.log('onBeforeRouteUpdate',to.path); });