VUE 核心组件之 vue-route 的使用

本贴最后更新于 938 天前,其中的信息可能已经时过境迁

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。

1、安装vue-router

2、vue-router的基本使用

# 1、定义路由对应的组件 const Login = {template: `<h1>登录页面</h1>`} const Home = {template: `<h1>项目首页</h1>`} # 2、创建一个路由对象,设置路由匹配规则 const router = createRouter({  history: createWebHashHistory(),      routes:[     { path: '/login', component: Login },     { path: '/home', component: Home }   ] }) # 3、将路由对象挂载到vue实例中 const app = Vue.createApp({}) app.use(router) app.mount('#app') # 4、#app中使用<router-view><\router-view>来定义路由展示位

3、编程式和声明式导航(页面跳转)

1、声明式

<router-link to="/login">登录</router-link>
// to后面是一个对象时,要使用属性绑定 <router-link :to="{ path: '/login'}">登录</router-link>

2、编程式

**在项目中我们有些时候需要主动去访问某个路由,比如登录成功之后,需要跳转到项目首页,那么 在 Vue 实例内部,你可以调用 **this.$router.push,主动访问某个路由。

this.$router.push('/login')
this.$router.push({path: '/login'})

4、路由重定向

const router = createRouter({ history: createWebHashHistory(), routes: [   { path: '/index', redirect: '/login' } ] })

5、命名路由

**你可以在创建 Router 实例的时候,在 **routes 配置中给某个路由设置名称。

const router = createRouter({  history: createWebHashHistory(),  routes: [   {      path: '/user/login',      name: 'user',      component: User   } ] })

路由命名后可以直接通过name指定路由名访问

<router-link :to="{ name: 'login'}">登录</router-link>
this.$router.push({name: 'login'})

6、路由嵌套

一个路由中嵌套多个子路由(一个页面中根据不同的情况显示不同的内容)

const Home = {    template: `    <div class="main">        <div class="topMenu" style="height: 100px;background: #000000;">            <router-link :to="{name:'pro'}">           <button type="button">项目管理</button>            </router-link>            <router-link :to="{name:'inter'}">           <button type="button">接口管理</button>            </router-link>            <router-link :to="{name:'env'}">           <button type="button">环境管理</button>            </router-link>        </div>        <div class="content">       <router-view></router-view>        </div>    </div> ` } const Project = {    template: `    <div>   <h1>项目页面</h1>    </div> ` } const InterFace = {    template: `    <div>   <h1>接口管理页面</h1>    </div>    `   } const Env = {    template: `    <div>   <h1>项目环境页面</h1>    </div>    `   }
const routes = [{        path: '/',        component: Home,        name: 'home',        children: [           {path: '/project',component: Project,name: 'pro'},           {path: '/interface',component: InterFace,name: 'inter'},           {path: '/env',component: Env,name: 'env'}       ]   }]

访问嵌套路由的路径时,对应的组件会渲染在父路由预留的路由展示位中

7、路由动态匹配及参数

1、路径参数

**在项目中我们可能会需要把 **/user/111/user/112 都将映射到同一个路由,那么此时我们只需要在配置路由的时候把user后面的数据参数化处理即可

const router = createRouter({  history: createWebHashHistory(),  routes: [    // 动态路径参数 以冒号开头   { path: '/user/:id', component: User },   { path: '/user/:id/:key', component: User }   ] })

2、查询参数query

查询参数类似于get请求的参数形式,/user/login/?user=123&pwd=23333

this.$router.push({    name: 'user', query:{        user:123,        pwd:23333       } }) //匹配到的参数可以在路由对应的组件中通过 $route.query.参数 使用

8、路由导航守卫

router.beforeEach((to, from, next) => {    // to:表示将要访问的路径    // from 代表从哪个路径而来    // next 是一个函数,表示执行下一步    //判断是否访问的是登录页面    if (to.path === '/login') return next()    // 判断当前是否能获取到token    if (window.sessionStorage.getItem('token')) return next()    // 没有token,则跳转到登录页面    return next('./login') })

扩展

回帖
请输入回帖内容 ...