vue3 配置路由

index.js 文件内容如下

// history模式
import {
    createRouter,
    createWebHashHistory,
} from 'vue-router'

import Home from '../pages/Home.vue'
import About from '../pages/About.vue'
以下可以另写一个 routes.js 
const routes = [
// 路由的默认路径
    {
        path:'/',
        redirect:"/home"
    },
    {
        path: '/home',
        component: Home
    },
    {
        path: '/about',
        component: About
    },
]

// 创建路由对象
const router = createRouter({
    history: createWebHashHistory(),
    routes
})
export default router;

main.js

import {
    createApp
} from 'vue'
import App from './App.vue'
import router from './router'
createApp(App).use(router).mount('#app')

App.vue

<template>
  <div>
    <router-link to="/home">home</router-link>
    <router-link to="/about">about</router-link>
    <keep-alive>
      <router-view></router-view>
    </keep-alive>
  </div>
</template>

<script>
export default {
  name: "App",
  components: {},
};
</script>

<style>
</style>

router-link
上面有提到过router-link,下面我们来简单介绍一下他的使用
router-link事实上有很多属性可以配置:

to属性:是一个字符串,或者是一个对象
replace属性:设置 replace 属性的话,当点击时,会调用 router.replace(),而不是 router.push();
active-class属性:设置激活a元素后应用的class,默认是router-link-active
exact-active-class属性:链接精准激活时,应用于渲染的 的 class,默认是router-link-exact-active;
路由懒加载
如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就会
更加高效;

这里可以使用webpack的分包知识,而Vue Router默认就支持动态来导入组件

这是因为component可以传入一个组件,也可以接收一个函数,该函数 需要放回一个Promise;

而import函数就是返回一个Promise;

const routes = [{
path: ‘/’,
redirect: “/home”
},
{
path: ‘/home’,
component: () => import(’…/pages/Home.vue’)
},
{
path: ‘/about’,
component: () => import(’…/pages/About.vue’)
},
]

动态路由基本匹配
很多时候我们需要将给定匹配模式的路由映射到同一个组件:

在Vue Router中,我们可以在路径中使用一个动态字段来实现,我们称之为 路径参数

{
path: “/user/:id”,
component: () => import(’…/pages/user.vue’)
}

在router-link中进行如下跳转:

<router-link to="/user/123">user</router-link>

获取路由的值
在setup中,我们要使用 vue-router库给我们提供的一个hook useRoute;

<template>
  <div>{{ route.params }}</div>
</template>

<script>
import { useRoute } from "vue-router";
export default {
  setup() {
    const route = useRoute();

    return { route };
  },
};
</script>

<style lang="scss" scoped>
</style>

NotFound
对于哪些没有匹配到的路由,我们通常会匹配到固定的某个页面

路由的嵌套

   {
        path: '/home',
        component: () => import( /* webpackChunkName:"home-chunk"*/ '../pages/Home.vue'),
        children: [{
            path:'',
            redirect:'/home/product'
        },{
            path:'product',
            component:()=>import('../pages/HomeProduct.vue')
        }]
    },

代码的页面跳转

setup() {
    const router = useRouter();
    const jumpTo = () => {
      router.push({
        path: "/about",
        query: {
          name: "fuck",
        },
      });
    };
    return {jumpTo};
  },

页面的请求

 {{$route.query}}

router-view的v-slot

router-view也提供给我们一个插槽,可以用于 和 组件来包裹你的路由组件:

Component:要渲染的组件;

route:解析出的标准化路由对象;

路由导航守卫

vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。
全局的前置守卫beforeEach是在导航触发时会被回调的:
它有两个参数:to:即将进入的路由Route对象;from:即将离开的路由Route对象;
它有返回值:false:取消当前导航;不返回或者undefined:进行默认导航;
返回一个路由地址:可以是一个string类型的路径;可以是一个对象,对象中包含path、query、params等信息;
可选的第三个参数:next
在Vue2中我们是通过next函数来决定如何进行跳转的;
但是在Vue3中我们是通过返回值来控制的,不再推荐使用next函数,这是因为开发中很容易调用多次next;

router.beforeEach((to, from) => {
    console.log('to', to)
    console.log('from', from)
    if (to.path !== '/about') {
        const token = localStorage.setItem('token', 'qwer')
        if (!token) {
            return '/about'
        }
    }
})

### Vue3配置路由的方法及示例 在 Vue3 中,`vue-router` 是用于管理前端路由的核心库。以下是关于如何在 Vue3 项目中配置路由的具体方法以及相关示例。 #### 安装 `vue-router` 首先,在使用路由之前需要安装 `vue-router` 库。可以通过 npm 或 yarn 来完成安装: ```bash npm install vue-router@next ``` 或者 ```bash yarn add vue-router@next ``` 由于 Vue3 使用的是 Composition API 和新的生命周期钩子,因此需要确保安装的是兼容 Vue3 的版本(即 `vue-router@4.x`)[^1]。 --- #### 配置基础路由 创建一个名为 `router.js` 或 `index.js` 的文件来定义路由规则。以下是一个简单的路由配置示例: ```javascript // router/index.js import { createRouter, createWebHistory } from &#39;vue-router&#39;; import Home from &#39;../views/Home.vue&#39;; // 主页组件 import Category from &#39;../views/Category/index.vue&#39;; // 分类页面组件 const routes = [ { path: &#39;/&#39;, name: &#39;Home&#39;, component: Home, }, { path: &#39;/category&#39;, name: &#39;Category&#39;, component: Category, }, ]; const router = createRouter({ history: createWebHistory(), routes, }); export default router; ``` 在此示例中,我们引入了两个视图组件并将其注册为路由路径 `/` 和 `/category`。注意这里还设置了 `history` 模式为 `createWebHistory()`,这是为了实现 HTML5 历史模式的 URL 跳转[^2]。 --- #### 将路由集成到应用中 接下来,在项目的入口文件 `main.js` 中导入并挂载路由器实例: ```javascript // main.js import { createApp } from &#39;vue&#39;; import App from &#39;./App.vue&#39;; import router from &#39;./router&#39;; const app = createApp(App); app.use(router); app.mount(&#39;#app&#39;); ``` 这样就完成了路由与应用程序之间的绑定操作。 --- #### 渲染 `<router-view>` 组件 最后一步是在模板中放置 `<router-view>` 占位符以便动态显示对应的组件内容。例如: ```html <!-- App.vue --> <template> <div id="app"> <nav> <!-- 导航链接 --> <router-link to="/">首页</router-link> | <router-link to="/category">分类</router-link> </nav> <!-- 动态渲染区域 --> <router-view></router-view> </div> </template> ``` 上述代码展示了如何利用 `<router-link>` 实现页面间的切换功能,并通过 `<router-view>` 插槽展示匹配成功的组件[^3]。 --- #### 处理未找到的路由 (404) 为了避免访问不存在的地址时返回空白界面,可以设置一条通配符规则捕获所有未知请求并将它们重定向至自定义错误提示页面: ```javascript { path: &#39;/:pathMatch(.*)*&#39;, name: &#39;NotFound&#39;, component: () => import(&#39;../views/NotFound.vue&#39;), // 按需加载 } ``` 此部分实现了当用户输入非法路径时自动跳转到指定的 404 页面的功能[^4]。 --- ### 总结 以上就是在 Vue3配置基本路由的方式及其注意事项。它涵盖了从环境搭建、模块引入再到实际运用中的每一个重要环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值