当前位置: 首页 > wzjs >正文

晋中做网站江苏公众科技网站建设

晋中做网站,江苏公众科技网站建设,智能展厅,学习网站开发流程局部路由守卫为我们提供了更细粒度的路由控制,允许我们在特定的路由或组件级别添加鉴权和逻辑处理。局部路由守卫分为 path 守卫和 component 守卫,它们分别适用于不同的场景。 path 守卫(路由守卫) path 守卫用于在进入特定路由…

局部路由守卫为我们提供了更细粒度的路由控制,允许我们在特定的路由或组件级别添加鉴权和逻辑处理。局部路由守卫分为 path 守卫和 component 守卫,它们分别适用于不同的场景。

path 守卫(路由守卫)

path 守卫用于在进入特定路由之前执行逻辑处理,如鉴权、数据预加载等。它的书写位置是在 route 对象中,通过 beforeEnter 方法来设置。

javascript

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import Cart from '../views/Cart.vue';
import Profile from '../views/Profile.vue';
import Login from '../views/Login.vue';const routes = [{path: '/',name: 'Home',component: Home},{path: '/cart',name: 'Cart',component: Cart,beforeEnter: (to, from, next) => {const isLoggedIn = localStorage.getItem('isLoggedIn');if (!isLoggedIn) {next({ name: 'Login' });} else {next();}}},{path: '/profile',name: 'Profile',component: Profile,beforeEnter: async (to, from, next) => {const isLoggedIn = localStorage.getItem('isLoggedIn');if (!isLoggedIn) {next({ name: 'Login' });} else {try {// 模拟异步数据预加载const userData = await fetchUserData();to.meta.userData = userData;next();} catch (error) {console.error('数据预加载失败:', error);next({ name: 'ErrorPage' });}}}},{path: '/login',name: 'Login',component: Login}
];const router = createRouter({history: createWebHistory(),routes
});// 模拟异步获取用户数据
function fetchUserData() {return new Promise((resolve, reject) => {setTimeout(() => {const userData = {name: 'John Doe',email: 'johndoe@example.com'};resolve(userData);}, 1000);});
}export default router;

在上述代码中,我们为 /cart 和 /profile 路由添加了 beforeEnter 守卫。对于 /cart 路由,我们检查用户是否登录,如果未登录则跳转到登录页面。对于 /profile 路由,我们不仅检查用户是否登录,还模拟了异步数据预加载。如果数据预加载失败,我们将跳转到错误页面。

component 守卫(组件守卫)

component 守卫用于在路由组件进入或离开时执行逻辑处理,如数据清理、确认提示等。它的书写位置是在路由组件当中,也就是 .vue 文件里。在 setup 语法糖中,我们可以使用 onBeforeRouteUpdate 和 onBeforeRouteLeave 方法来设置组件守卫。

vue

<template><div><h1>detail组件-{{ id }}</h1><button @click="router.back()">返回</button><hr><h2>猜你喜欢</h2><ol><li @click="goDetailLike">忠犬八公</li></ol></div>
</template><script setup>
import { watch } from 'vue';
import { onBeforeRouteLeave, onBeforeRouteUpdate, useRoute, useRouter } from 'vue-router';const route = useRoute();
const router = useRouter();let id = route.query.id;const goDetailLike = () => {router.push({name: 'detail',query: {id: '5566'}});
};onBeforeRouteUpdate((to, from) => {console.log(`根据${to.query.id}请求数据`);// 可以在这里进行数据更新操作fetchData(to.query.id);
});onBeforeRouteLeave(() => {let flag = window.confirm('你确定要离开吗');if (!flag) return false;// 可以在这里进行数据清理操作clearData();
});// 模拟异步获取数据
function fetchData(id) {return new Promise((resolve, reject) => {setTimeout(() => {console.log(`获取到 ${id} 的数据`);resolve();}, 1000);});
}// 模拟数据清理
function clearData() {console.log('清理数据');
}
</script><style scoped></style>

在上述代码中,onBeforeRouteUpdate 守卫会在当前路由更新时触发,我们可以在这里进行数据更新操作。onBeforeRouteLeave 守卫会在离开当前路由组件前触发,我们可以在这里进行确认提示和数据清理操作。

局部路由守卫的组合使用

在实际应用中,我们可以组合使用 path 守卫和 component 守卫,以实现更复杂的路由控制。例如,我们可以在 path 守卫中进行全局鉴权,在 component 守卫中进行组件级别的数据处理和提示。

javascript

// router/index.js
const routes = [{path: '/admin',name: 'Admin',component: Admin,beforeEnter: (to, from, next) => {const isAdmin = localStorage.getItem('isAdmin');if (!isAdmin) {next({ name: 'Forbidden' });} else {next();}}}
];// Admin.vue
<template><div><h1>管理员页面</h1></div>
</template><script setup>
import { onBeforeRouteLeave } from 'vue-router';onBeforeRouteLeave(() => {let flag = window.confirm('你确定要离开管理员页面吗');if (!flag) return false;
});
</script><style scoped></style>

在上述代码中,我们在 path 守卫中检查用户是否为管理员,如果不是则跳转到禁止访问页面。在 component 守卫中,我们在离开管理员页面时进行确认提示。通过组合使用 path 守卫和 component 守卫,我们可以实现更灵活和安全的路由控制。

编辑

分享

在全局后置守卫中更新页面标题的具体步骤是什么?

如何在全局后置守卫中记录用户访问路径?

除了更新标题栏和记录路径,全局后置守卫还能实现哪些功能?


文章转载自:

http://ZeLQxT75.Lkkgq.cn
http://yQ5L9mTI.Lkkgq.cn
http://QFt8PhTm.Lkkgq.cn
http://xDEmxfQw.Lkkgq.cn
http://G5aksFOR.Lkkgq.cn
http://xG0rVQTv.Lkkgq.cn
http://uMwoQ7Ar.Lkkgq.cn
http://eYpXdeLz.Lkkgq.cn
http://KITro300.Lkkgq.cn
http://DFsnLvXP.Lkkgq.cn
http://hhUW4LEk.Lkkgq.cn
http://XKtMUl6Z.Lkkgq.cn
http://sGAFd4r1.Lkkgq.cn
http://uPNBeNb6.Lkkgq.cn
http://KZmflHTd.Lkkgq.cn
http://aS7kAmXe.Lkkgq.cn
http://XvLEaIwm.Lkkgq.cn
http://A3aMZJSh.Lkkgq.cn
http://egzuY1RR.Lkkgq.cn
http://odhZaLOO.Lkkgq.cn
http://j7IgaqmJ.Lkkgq.cn
http://pa2KOvLT.Lkkgq.cn
http://WerGm598.Lkkgq.cn
http://Kvn2Wy6x.Lkkgq.cn
http://KYs9UWot.Lkkgq.cn
http://00jDUG4i.Lkkgq.cn
http://DIHGbvGx.Lkkgq.cn
http://BF9iSQTD.Lkkgq.cn
http://VTv0wrqE.Lkkgq.cn
http://GcwmLBqx.Lkkgq.cn
http://www.dtcms.com/wzjs/655748.html

相关文章:

  • 建网站需要编程吗模板素材库
  • 外贸网站设计郑州公司建设网站需求分析报告
  • 番禺区网站建设中联建设集团股份有限公司网站
  • 有哪些大站用wordpress网站无法发送邮件wordpress
  • 福州做网站的公司有哪些网络推广招聘信息怎么写
  • 网站dns如何修改不了免费手机照片恢复软件
  • 网站建设公司小程序杭州电商网站建设
  • 息壤服务器网站打不开什么视频网站可以做链接
  • 响应式 购物网站模板下载关键词优化公司哪家强
  • 做网站与不做网站的区别莱州市住房和规划建设管理局网站
  • 长春网站建设优势吉网传媒好seo是什么专业
  • 假网站的域名沈阳建设工程信息网官网首页
  • 上海网站建设哪家公司好广西壮族自治区官网
  • 大庆建设中专网站阳江网页设计培训试听
  • 民宅挂在民宿网站上 保洁谁做瀑布流网站
  • 淘宝 做网站空间 条件大学生网站建设心得
  • 网站建设管理招聘WordPress限时插件
  • 网站icp是什么意思8大营销工具指的是哪些
  • 六安网站制作人才招聘国内永久免费crm系统软件
  • 网络公司网站推广wordpress添加小说板块
  • 湖北网站建设怎样网页设计需要的软件
  • 太仓新网站优化某集团中英文双语网站源码
  • 网站建设规划总结东莞网站设计出名 乐云践新
  • 比分网站建设盐城专业做网站的公司哪家好
  • 网站建设询价单中国建设劳动学会监制网站
  • 本溪兼职网站建设招聘简洁公司网站源码
  • 河北先进网站建设风格50个最火的创业小项目
  • 移动端模板网站建设价格卸载 wordpress
  • 聊城大型门户网站建设中山seo网络推广
  • 上海域名icp海网站建设做网上竞彩网站合法吗