网站首页 > 博客文章 正文
路由参数变动的探讨
在应用中利用路由参数,例如从路径 /user/foo 转向 /user/bar,原有的组件实例会被重用以提高效率,因为这两个路径共享同一组件。此机制虽提升了性能,但也意味着组件的生命周期钩子将不再触发,需要另寻他径监控此类变化。
监视路由参数变更策略
策略一:利用 Watcher 监听
- 方法一:直接在 watch 中定义对 $route 的监听,当路由变化时,自动执行对应的函数打印出新旧路由信息。
watch: {
$route(to, from) {
console.log('新路由:', to);
console.log('旧路由:', from);
}
},
- 方法二:采用更详细的配置,通过 handler 函数响应变更,并可设置 deep: true 进行深度监听
watch: {
$route: {
handler(to, from) {
console.log('新路由:', to);
console.log('旧路由:', from);
},
deep: true
}
},
- 方法三:绑定自定义方法处理路由变化,如 getPath。
watch: {
'$route': 'getPath'
},
methods: {
getPath(to, from) {
console.log('当前路由路径:', this.$route.path);
}
},
实践案例
- 案例1:仅在查询参数 id 变化时触发初始化数据加载。
watch: {
'$route'(to, from) {
if (to.query.id !== from.query.id) {
this.id = to.query.id;
this.init(); // 重新加载数据
}
}
},
- 案例2:进入路由或路由参数变化时立即执行 init 方法。
watch: {
'$route': {
handler: 'init',
immediate: true
}
}
为了确保组件根据路由参数变化重新渲染,可为 <router-view> 添加唯一 key,如使用 $route.fullPath。
<router-view :key="$route.fullPath"></router-view>
策略二:应用导航守卫
- beforeRouteEnter:在组件渲染前调用,因此时组件实例未创建,需通过 next(vm => {}) 访问实例。
beforeRouteEnter(to, from, next) {
console.log('进入前守卫触发');
next(vm => {
console.log('组件实例:', vm);
});
},
- beforeRouteUpdate:路由更新但组件复用时触发,可用于更新组件数据。
beforeRouteUpdate(to, from, next) {
console.log('路由更新守卫触发');
next();
},
- beforeRouteLeave:离开当前路由前调用,可进行确认提示等操作。
beforeRouteLeave(to, from, next) {
const isConfirmed = window.confirm('确定离开此页?');
if (isConfirmed) {
console.log('离开路由守卫确认离开');
next();
} else {
next(false); // 阻止导航
}
},
以上方法确保了路由参数变化时,无论是通过监听还是守卫机制,都能有效地响应并执行相应的逻辑处理。
- 上一篇: 前端权限路由详细介绍(前端路由权限控制)
- 下一篇: vue路由鉴权(vue 路由鉴权)
猜你喜欢
- 2024-10-05 Web 开发中 route 和 router 有什么区别?
- 2024-10-05 图解各种路由协议(路由协议基础知识)
- 2024-10-05 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 下)
- 2024-10-05 2024前端面试题(三)(2020前端最新面试题)
- 2024-10-05 详解Vue3中 router 带来了哪些变化?
- 2024-10-05 Vue实战篇|使用路由管理用户权限(动态路由)
- 2024-10-05 vue路由鉴权(vue 路由鉴权)
- 2024-10-05 前端权限路由详细介绍(前端路由权限控制)
- 2024-10-05 VUE前端编程:浅谈路由的常见管理模式
- 2024-10-05 Vue路由守卫及页面登录权限控制的设置方法
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)