学习使用路由Vue-Router

33 篇文章 3 订阅

简言

终于要使用vue-router啦,总在一个页面编写内容已经写腻了。这篇文章是使用vue-router的入门篇,简单将一下用途和使用方法。先甩官方文档Vue-Router

话不多说,不玩虚的,let’s go! ——ZSK666

正文

用途

我们都知道使用vue框架基本是用来做单页应用的(single page web application,SPA),单页应用就是这样,利用路由来实现和多页应用相似的页面跳转效果。当然你也可以自己搞,如果觉得自己搞的不好、不全面、兼容性不高的话,就使用现有相对完善的路由工具。
vue推荐的是vue-router。Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成,让用 Vue.js 构建单页应用变得轻而易举。功能包括:

  • 嵌套路由映射
  • 动态路由选择
  • 模块化、基于组件的路由配置
  • 路由参数、查询、通配符
  • 展示由 Vue.js 的过渡系统提供的过渡效果
  • 细致的导航控制
  • 自动激活 CSS 类的链接
  • HTML5 history 模式或 hash 模式
  • 可定制的滚动行为
  • URL 的正确编码

安装配置

安装

我是用npm 安装

npm install vue-router@4
配置

先在pages创建路由文件夹router,然后引入vue-router创建路由实例。
在这里插入图片描述
我使用了ts,文件如下:

/*
 * @Date: 2022-11-15 15:13:50
 * @LastEditors: zhangsk
 * @LastEditTime: 2022-11-15 15:27:08
 * @FilePath: \basic-demo\src\router\index.ts
 * @Label: Do not edit
 */
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    component: () => import('../pages/index.vue')
  }
]

const router = createRouter({
  history: createWebHistory(),  //  使用类似h5的路由,有两种模式,h5路由:createWebHistory, hash路由:createWebHashHistory
  routes,
})

export default router

然后在vue实例中(默认是pages下的main.ts)使用router的实例:

/*
 * @Date: 2022-10-27 11:31:17
 * @LastEditors: zhangsk
 * @LastEditTime: 2022-11-15 15:26:13
 * @FilePath: \basic-demo\src\main.ts
 * @Label: Do not edit
 */
import { createApp } from 'vue'
import App from './App.vue'
//  router
import router from './router/index'

const app = createApp(App)
app.use(router)
app.mount('#app')

在App.vue中使用router-view渲染内容。

<!--
 * @Date: 2022-10-27 11:31:17
 * @LastEditors: zhangsk
 * @LastEditTime: 2022-11-15 15:45:41
 * @FilePath: \basic-demo\src\App.vue
 * @Label: Do not edit
-->
<script setup lang="ts"></script>

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

<style scoped></style>

大功告成!!!后面只专注router下index.ts文件中的routes配置就行。

基础使用

在说使用之前我们先了解几个基本的属性:

  • router-link:我们没有使用常规的 a 标签,而是使用一个自定义组件 router-link 来创建链接。这使得 Vue Router 可以在不重新加载页面的情况下更改 URL,处理 URL 的生成以及编码。
  • router-view:router-view 将显示与 url 对应的组件。你可以把它放在任何地方,以适应你的布局。
  • useRoute:返回当前路由地址。相当于在模板中使用 $route。必须在 setup() 中调用。可以查看当前页面的一些信息。
  • useRouter:返回 router 实例。相当于在模板中使用 $router。必须在 setup() 中调用。可以使用一些方法改变路由,利如使用push(path)跳转到指定路由。

上面的是在项目中经常用到的属性,等下展示使用示例,在这之前我们先了解怎么添加路由。
添加一个新的路由是在路由实例那的routes对象:
在这里插入图片描述
routes是一个数组,数组的每一项都是一个路由对象,路由对象有以下属性:

  • path(必需) -路由路径 ,大部分写成字符串的形式,也有高级用法路由高级匹配,但一般都是静态路由,具体需求具体分析。
  • component(必需) - 要渲染的组件,这个和导入组件用法一样,可以对象形式,也接受返回Promise对象的函数形式。
  • name - 路由名字,建议要写,因为在传递params参数时会用到。
  • redirect - 重定向,顾名思义,就是重定向到指定路由。例:{path:‘/’,redirect:‘/index’},将/重定向到/index。
  • alias - 别名。给path起别名,例如:{path:‘/’,alias:‘/home’},将/别名为/home,访问/home时就会显示/ 的渲染组件。
  • children - 嵌套路由。使用children可以写二级路由,是个子路由对象数组,每一项都是路由对象(注意子路由path不要带/ )。访问时需要加上路由的path访问,例:如果一级路由path为/index,某个子路由path为detail,则需要/index/detail访问。
    routes示例:
/*
 * @Date: 2022-11-15 15:13:50
 * @LastEditors: zhangsk
 * @LastEditTime: 2022-11-15 16:42:39
 * @FilePath: \basic-demo\src\router\index.ts
 * @Label: Do not edit
 */
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
import type { RouteRecordRaw } from 'vue-router'

//  页面组件
import Index from '@/pages/index.vue'
import Detail from '@/pages/detail.vue'
import Login from '@/pages/login/index.vue'

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    component: Login
  },
  {
    path: '/one',
    name: 'one',
    component: Index
  },
  {
    path: '/two',
    redirect: '/one', //  重定向到 /one
    component: () => import('../pages/one.vue'),
    children: [
      {
        path: 'detail', //  /two/detail
        component: Detail,
      }
    ]
  },
  {
    path: '/three',
    alias: '/ones', //  访问 /ones和 /three效果一样
    component: () => import('../pages/one.vue'),
    children: [
      {
        path: 'detail',
        component: Detail,
      }
    ]
  },
]

const router = createRouter({
  history: createWebHistory(),  //  使用类似h5的路由,有两种模式,h5路由:createWebHistory, hash路由:createWebHashHistory
  routes,
})

export default router

使用:

<!--
 * @Date: 2022-11-15 16:40:43
 * @LastEditors: zhangsk
 * @LastEditTime: 2022-11-15 16:47:42
 * @FilePath: \basic-demo\src\pages\login\index.vue
 * @Label: Do not edit
-->
<template>
  <div class="container">
    <router-link to="one">One</router-link>
    <button @click="detail">跳转详情</button>
  </div>
</template>
<script lang="ts" setup>
import { reactive, toRefs, onBeforeMount, onMounted } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
const detail = () => {
  router.push({
    path: "/two/detail",
  });
};
</script>
<style lang="scss" scoped></style>

效果:
在这里插入图片描述
点击one
在这里插入图片描述
点击跳转详情
在这里插入图片描述

结语

结束了。讲了vue-router基本使用,除了这些外,常使用的还有路由守卫,路由传参(query和params),路由切换过渡效果和动态添加路由等,这里不再介绍,想了解请到官网。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSK6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值