(学习笔记)vue-router

1.安装

npm install vue-router@3.6.5

 2.简单使用

1.创建router文件夹,创建index.js写入

import Vue from "vue";
import VueRouter from  'vue-router'
// 1. 定义 (路由) 组件。
// 可以从其他文件 import 进来
import Home from '../views/home.vue'
Vue.use(VueRouter)

// 2. 定义路由
const routes = [
  { path: 'home', component: Home,name:'home'},
]

// 3. 创建 router 实例,然后传 `routes` 配置

const router = new VueRouter({
  // mode: 'history',
    routes // (缩写) 相当于 routes: routes
  })
4.导出router
export default router

2.main.js挂载

import router from './router'

new Vue({
  render: h => h(App),
  router,
  store,
}).$mount('#app')

3.App.vue下定义路由出口

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

3.声明式导航传参

注意:参数都在$route上

 //路由写法
 routes: [
    // 动态路径参数 以冒号开头
    { path: '/user/:id', component: User }
  ]

//组件获取值
 {{ $route.params.id }}

4.编程式导航传参**

注意:参数都在$route上

router-link等同于this.$router.push()

// 命名的路由
router.push({ name: 'user', params: { userId: '123' }})

// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})

# router.replace(location, onComplete?, onAbort?)

router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录。

router.go(n)这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)

// 在浏览器记录中前进一步,等同于 history.forward()
router.go(1)

// 后退一步记录,等同于 history.back()
router.go(-1)

5.嵌套路由**

/user/foo/profile                     /user/foo/posts
+------------------+                  +-----------------+
| User             |                  | User            |
| +--------------+ |                  | +-------------+ |
| | Profile      | |  +------------>  | | Posts       | |
| |              | |                  | |             | |
| +--------------+ |                  | +-------------+ |
+------------------+                  +-----------------+

对于这样的层级关系。Profile和Posts相当于User的子组件,使用vue-router根据路由渲染他们。

第一步在路由里面定义他们

const router = new VueRouter({
  routes: [
    {
      path: '/user/:id',
      component: User,
      children: [
        {
          // 当 /user/:id/profile 匹配成功,
          // UserProfile 会被渲染在 User 的 <router-view> 中
          path: 'profile',
          component: UserProfile
        },
        {
          // 当 /user/:id/posts 匹配成功
          // UserPosts 会被渲染在 User 的 <router-view> 中
          path: 'posts',
          component: UserPosts
        }
      ]
    }
  ]
})

第二步:在想渲染的位置写下router-view站位

<div id="app">
  <router-view></router-view>
</div>

6.重定向**

const routes = [
    {
        path:'/',
        redirect:'/login'
    }
]

7.导航守卫

三个参数(to, from, next)  to要去向那个url,from从哪个url来,next()允许通过还是不通过并指定一个去向。一定要有一个next()执行。

{ path: 'userInfo', component: ()=>import('@/views/userInfo.vue'),name:'userInfo'  ,meta:{requireAuth: true,}},
//全局前置守卫,如果要去的页面是必须登录才能访问的就验证是否有token,没有就返回登录页
router.beforeEach((to, from, next) => {
  const token = localStorage.getItem("token")
  if(to.meta.requireAuth){
      if (token) {
        next();
    } else {
        next('/login');
    }
  }
  else next()
})

8.路由懒加载

component: ()=>import('@/views/userGroup.vue')

9.history模式

使用 history 模式时,URL 就像正常的 url,没有路由中的*,但是需要服务器端进行配合。

参考链接:Vue Router

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值