实现未登录不可以浏览首页

在router中加入路由守卫 router.beforeEach

  1. const router = createRouter({
  2. history: createWebHashHistory(),
  3. routes,
  4. })
  5. router.beforeEach((to, from, next) => {
  6. const isLogin = JSON.parse(localStorage.getItem('isLogin') || '""')
  7. isLogin || to.name === 'Login' ? next() : next('/login')
  8. })

next中可以传入path 或者 name 等
name是路由的name

  1. {
  2. path: '/login',
  3. name: 'Login',
  4. component: Login,
  5. },

localStorage有三种读取/写入的方式

  1. localStorage['a'] = 1
  2. localStorage.b = true
  3. localStorage.setItem('c', 'hello')

点击登录按钮时跳转到Home组件

使用 useRouter Composition API获取路由
router.push实现 url 切换, 文档

  1. import { useRouter } from 'vue-router'
  2. export default {
  3. setup(){
  4. const router = useRouter()
  5. const handleLogin = () => {
  6. localStorage.isLogin = true
  7. router.push({name: 'Home'})
  8. }
  9. return {
  10. handleLogin
  11. }
  12. }
  13. }

已登录则不能跳转至登录页面

添加路由独享守卫 beforeEnter, 在跳转到该路由前做判断

  1. {
  2. path: '/login',
  3. name: 'Login',
  4. component: Login,
  5. beforeEnter: (to, from, next) => {
  6. const isLogin = JSON.parse(localStorage.getItem('isLogin') || '""')
  7. isLogin ? next({ name: 'Home' }) : next()
  8. },