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

万维网网站服务的名称做网站需要注册什么公司

万维网网站服务的名称,做网站需要注册什么公司,线上销售方案,高性能网站开发 书籍路由守卫是 Vue Router 提供的主要功能之一,用于在导航过程中进行控制和拦截。它们主要用于:权限验证数据预加载导航确认页面访问统计路由守卫分类1. 全局守卫全局前置守卫 beforeEachconst router createRouter({ ... })router.beforeEach((to, from, …

路由守卫是 Vue Router 提供的主要功能之一,用于在导航过程中进行控制和拦截。它们主要用于:

  • 权限验证

  • 数据预加载

  • 导航确认

  • 页面访问统计

路由守卫分类

1. 全局守卫

全局前置守卫 beforeEach
const router = createRouter({ ... })router.beforeEach((to, from, next) => {// to: 即将进入的目标路由对象// from: 当前导航正要离开的路由对象// next: 函数,必须调用以解析这个钩子if (to.meta.requiresAuth && !isAuthenticated()) {next({path: '/login',query: { redirect: to.fullPath }})} else {next() // 继续导航}
})
全局解析守卫 beforeResolve
router.beforeResolve(async (to, from, next) => {// 在导航被确认之前,组件内守卫和异步路由组件被解析之后调用if (to.meta.requiresCamera) {try {await askForCameraPermission()next()} catch (error) {next(false) // 取消导航}} else {next()}
})
全局后置钩子 afterEach
router.afterEach((to, from) => {// 导航已经完成,无法改变导航// 适合用于页面访问统计、页面标题设置等document.title = to.meta.title || '默认标题'sendToAnalytics(to.fullPath)
})

2. 路由独享守卫

const routes = [{path: '/admin',component: Admin,beforeEnter: (to, from, next) => {// 只在进入该路由时触发if (!isAdmin()) {next('/unauthorized')} else {next()}}}
]

3. 组件内守卫

beforeRouteEnter
export default {beforeRouteEnter(to, from, next) {// 在渲染该组件的对应路由被验证前调用// 不能获取组件实例 `this`,因为组件实例还没被创建next(vm => {// 通过回调参数访问组件实例vm.fetchData(to.params.id)})}
}
beforeRouteUpdate
export default {beforeRouteUpdate(to, from, next) {// 在当前路由改变,但是该组件被复用时调用// 可以访问组件实例 `this`this.userId = to.params.idthis.fetchUserData()next()}
}
beforeRouteLeave
export default {beforeRouteLeave(to, from, next) {// 在导航离开该组件的对应路由时调用// 可以访问组件实例 `this`const answer = window.confirm('确定要离开吗?未保存的更改将会丢失')if (answer) {next()} else {next(false) // 取消导航}}
}

完整的导航解析流程

  1. 导航被触发

  2. 调用失活组件的 beforeRouteLeave 守卫

  3. 调用全局的 beforeEach 守卫

  4. 在重用的组件里调用 beforeRouteUpdate 守卫

  5. 调用路由配置里的 beforeEnter 守卫

  6. 解析异步路由组件

  7. 在被激活的组件里调用 beforeRouteEnter 守卫

  8. 调用全局的 beforeResolve 守卫

  9. 导航被确认

  10. 调用全局的 afterEach 钩子

  11. 触发 DOM 更新

  12. 调用 beforeRouteEnter 守卫中传给 next 的回调函数,创建好的组件实例会作为回调函数的参数传入

面试题解答指南

常见面试题及解答

1. Vue Router 有哪些路由守卫?它们的执行顺序是怎样的?

解答:
Vue Router 提供了三类路由守卫:

  1. 全局守卫beforeEachbeforeResolveafterEach

  2. 路由独享守卫beforeEnter

  3. 组件内守卫beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave

执行顺序:

  1. 导航被触发

  2. 调用失活组件的 beforeRouteLeave

  3. 调用全局 beforeEach

  4. 调用重用组件的 beforeRouteUpdate

  5. 调用路由配置的 beforeEnter

  6. 解析异步路由组件

  7. 调用激活组件的 beforeRouteEnter

  8. 调用全局 beforeResolve

  9. 导航确认

  10. 调用全局 afterEach

  11. DOM 更新

  12. 执行 beforeRouteEnter 中的 next 回调

2. beforeRouteEnter 中为什么不能访问 this?如何解决?

解答:
beforeRouteEnter 守卫在导航确认前被调用,此时组件实例还没被创建,所以无法访问 this

解决方案:
通过 next 的回调函数来访问组件实例:

beforeRouteEnter(to, from, next) {next(vm => {// 通过 vm 访问组件实例vm.fetchData(to.params.id)})
}
3. 如何实现路由权限控制?

解答:
通常在全局前置守卫 beforeEach 中实现:

router.beforeEach((to, from, next) => {const isLoggedIn = checkAuth() // 检查用户是否登录const requiresAuth = to.matched.some(record => record.meta.requiresAuth)if (requiresAuth && !isLoggedIn) {next({path: '/login',query: { redirect: to.fullPath }})} else if (to.path === '/login' && isLoggedIn) {next('/dashboard') // 已登录用户访问登录页时重定向} else {next()}
})
4. 路由守卫中 next() 的不同用法?

解答:

  • next():进行管道中的下一个钩子

  • next(false):中断当前导航

  • next('/path') 或 next({ path: '/path' }):跳转到不同的位置

  • next(error):传入 Error 实例,导航会被终止且错误会被传递给 router.onError()

5. 如何在路由守卫中进行异步操作?

解答:
可以返回 Promise 或使用 async/await:

router.beforeEach(async (to, from, next) => {if (to.meta.requiresAuth) {try {const user = await fetchUserInfo()if (user.isAuthenticated) {next()} else {next('/login')}} catch (error) {next('/error')}} else {next()}
})

实战示例:完整的权限控制系统

// router.js
import { createRouter, createWebHistory } from 'vue-router'const routes = [{path: '/',component: () => import('@/views/Home.vue'),meta: { title: '首页', requiresAuth: false }},{path: '/login',component: () => import('@/views/Login.vue'),meta: { title: '登录', requiresAuth: false }},{path: '/dashboard',component: () => import('@/views/Dashboard.vue'),meta: { title: '控制台', requiresAuth: true,requiredRoles: ['admin', 'editor']}},{path: '/admin',component: () => import('@/views/Admin.vue'),meta: { title: '管理员', requiresAuth: true,requiredRoles: ['admin']},beforeEnter: (to, from, next) => {// 路由独享守卫if (!hasRole('admin')) {next('/unauthorized')} else {next()}}},{path: '/unauthorized',component: () => import('@/views/Unauthorized.vue'),meta: { title: '无权限' }}
]const router = createRouter({history: createWebHistory(),routes
})// 全局前置守卫
router.beforeEach(async (to, from, next) => {// 设置页面标题document.title = to.meta.title || '默认标题'// 检查是否需要认证if (to.meta.requiresAuth) {const token = localStorage.getItem('token')const userInfo = JSON.parse(localStorage.getItem('userInfo') || '{}')if (!token) {next({path: '/login',query: { redirect: to.fullPath }})return}// 检查角色权限if (to.meta.requiredRoles) {const hasPermission = to.meta.requiredRoles.some(role => userInfo.roles?.includes(role))if (!hasPermission) {next('/unauthorized')return}}}next()
})// 全局后置钩子
router.afterEach((to, from) => {// 发送页面访问统计if (typeof gtag !== 'undefined') {gtag('config', 'GA_MEASUREMENT_ID', {page_path: to.path,page_title: to.meta.title})}
})export default router

面试技巧

  1. 理解原理:不仅要记住执行顺序,更要理解为什么是这样的顺序

  2. 结合实际:举例说明在实际项目中的应用场景

  3. 考虑边界情况:讨论错误处理、异步操作等复杂场景

  4. 性能考虑:提到路由守卫可能对性能的影响和优化方法

  5. 安全考虑:强调客户端路由守卫不能替代服务端验证

常见陷阱与最佳实践

  1. 避免无限循环:确保守卫逻辑不会导致无限重定向

  2. 错误处理:始终处理异步操作可能出现的错误

  3. 代码组织:将复杂的守卫逻辑抽离到单独的文件中

  4. 测试:编写单元测试来验证守卫逻辑的正确性

http://www.dtcms.com/a/450711.html

相关文章:

  • 相亲网站拉人做基金公司网站建设精品
  • 怎样做网站静态wordpress评论qq头像
  • 【代码随想录day 35】 力扣 1049. 最后一块石头的重量 II
  • 网站排名优化软件电话wordpress网络图片不显示
  • 网站建设相关制度门业网站模板
  • 基于 GEE 利用 Sentinel-2 数据结合线性回归模型实现碳储量反演
  • 招聘网站有哪些平台做视频网站盈利模式
  • Zsh 的基本语法总结
  • 网站伪静态作用吉林省头条新闻
  • 铜仁市网站建设免费做自己的网站
  • 网站双倍浮动注册个网站要多少钱
  • 易商官方网站python和wordpress
  • 吉安市网站制作北京网站建站网
  • 【高级版】Fastflow工作流系统源码全开源
  • discuz网站搬家大型网站的设计
  • 每日一个网络知识点:物理层数字传输系统
  • 网络网站建设属于什么费用扬中网
  • 成品网站能用吗wordpress wumi
  • 【实战场景】——开发中常见问题
  • No023:好奇心的觉醒——当DeepSeek开始主动探索世界
  • 阀门网站设计wordpress搜索开发
  • 数组——双指针:80.删除有序数组中的重复项 II
  • 网站开发在线学习百度高级搜索页面的网址
  • 什么网站做3d模型能赚钱golang做网站
  • 推广运营公司网站wordpress 模板添加
  • C48-数组指针与二维数组的配合应用
  • 成都专业的网站建设制作公司哪家好欧亚专线到国内多久
  • 西安长安区建设局网站阿里云服务器官方网站
  • 响应式网站建设有哪些好处四川住房和城乡建设网站
  • BBRv1 拥塞控制算法原理