首页 > 其他分享 >vue-plugin-Pages自动配置路由

vue-plugin-Pages自动配置路由

时间:2022-11-15 13:11:57浏览次数:60  
标签:src vue users plugin Pages vite pages 路由

vite-plugin-pages

使用

安装

首先先安装依赖。因为模版里自带了 vue-router ,所以不需要再安装。
cnpm add vite-plugin-pages vite-plugin-vue-layouts -D
在 vite.config.js 增加以下配置:

import Pages from 'vite-plugin-pages'
 
export default {
    plugins: [
        Pages({
            dirs: 'src/views',  // 需要生成路由的文件目录
            exclude: ['**/components/*.vue']  // 排除在外的目录,即不将所有 components 目录下的 .vue 文件生成路由
        })
    ]
}

目前只需要配置这 2 个参数就够了,其它还有更多参数可以去 vite-plugin-pages 项目页了解。

接着在页面中引入就可以使用了。

import { createRouter } from 'vue-router'
import routes from '~pages'
 
const router = createRouter({
    // ...
    routes
})

它能够根据pages文件夹下的文件组织结构自动生成一个路由数组,输入到Vue Router 实例中,文件组件结构决定你的路由层级,每次在pages目录下新增一个.vue文件后,即可自动为你创建路由,无需其他配置!
当然 pages 目录可以替换为你任何想要的目录名称,如views。 除了.vue文件,也支持 markdown 等格式在文件。
目前对 react 的支持尚在实验阶段,当然你也可以访问它的主页来了解更多内容。
除此之外,对于常见的路由方式,它也提供了支持:

基础的路由映射

vue-plugin-pages(后称 VPP )会自动将pages目录下的文件映射成相同名字的路由:

  • src/pages/users.vue -> /users
  • src/pages/users/profile.vue -> /users/profile
  • src/pages/settings.vue -> /settings

默认索引路由

以 index 命名的文件会自动当做路由的索引页:

  • src/pages/index.vue -> /
  • src/pages/users/index.vue -> /users

动态路由

使用方括号来表示动态路由,文件夹和文件都可以动态哦:

  • src/pages/users/[id].vue -> /users/:id (/users/one)
  • src/[user]/settings.vue -> /:user/settings (/one/settings)
    动态参数需要通过 props 传入到目标页面,如 src/pages/users/[id].vue 路由 /users/abc 将需要传递如下参数:
    { "id": "abc" }

嵌套路由

我们可以利用 Vue Router 子路由来创建嵌套布局。可以通过为父组件定义与包含子路由的目录相同的名称来定义父组件。

当我们有如下的目录结构时:

src/pages/
  ├── users/
  │  ├── [id].vue
  │  └── index.vue
  └── users.vue

将会得到如下的路由配置:

[
  {
    path: '/users',
    component: '/src/pages/users.vue',
    children: [
      {
        path: '',
        component: '/src/pages/users/index.vue',
        name: 'users'
      },
      {
        path: ':id',
        component: '/src/pages/users/[id].vue',
        name: 'users-id'
      }
    ]
  }
]

捕获所有路由

捕获所有路由使用包含省略号的方括号来表示:
src/pages/[...all].vue -> /* (/non-existent-page)
省略号后的文字将用于命名路由,以及用作传递路由参数的属性名称。

配置及实现

首先使用vite新创建一个vue项目:

# yarn
yarn create @vitejs/app my-vue-app --template vue-ts

cd my-vue-app

yarn add -D vite-plugin-pages

yarn add vue-router@next

然后将以下代码添加到你的vite.config.js中:

import Vue from '@vitejs/plugin-vue';
import Pages from 'vite-plugin-pages';

export default {
  plugins: [
    Vue(),
    Pages()
  ]
};

修改 main.ts:

import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router';
import routes from 'virtual:generated-pages';
import App from './App.vue';

console.log(routes);

const router = createRouter({
  history: createWebHistory(),
  routes,
});

const app = createApp(App);

app.use(router);

app.mount('#app');

修改 App.vue:

<template>
  <router-view />
</template>

到此为止已经完成了所有的配置及前置工作,接下来我们在 src 目录下创建 pages 目录,然后按照你的喜好添加文件吧,如:

├── [...all].vue # 捕获所有路由,常用于404
├── about
│   └── index.vue
├── about.vue # 通过/about来访问该页面
├── blog  # 通过/blog来访问
│   ├── [id].vue # 动态路由
│   ├── index.vue
│   └── today
├── components.vue
└── index.vue # 当访问本地IP和端口号时的默认页面

如果想要添加其他的文件目录,可以通过修改vite.config.js中的Pages - pagesDir属性进行配置。

标签:src,vue,users,plugin,Pages,vite,pages,路由
From: https://www.cnblogs.com/guozhiqiang/p/16892086.html

相关文章

  • vue3 获取组件实例 $ref方法踩坑 getCurrentInstance()
    ps:我使用的是element-plus框架,有一个需求是级联选择器,选择后需要获取最后的id和label一起传递给后端。获取id比较简单在change事件中使用value.pop()就可以获得但是获取......
  • Vue3+Vite简单使用
    前言Vue3大势不可阻挡,与之而来的就是Vite,尤雨溪极力推荐的前端开发与构建工具vue3原生支持TS,所以TS语法和vue3TS语法学起来vue中的vuex状态管理也用不顺手,看不顺......
  • Vue使用axios请求
    新建组件(局部引入):<template><div><p>{{msg}}</p></div></template><script>importaxiosfrom'axios';importQueryStringfrom'qs';exportde......
  • vue+element实现拖拽分屏
    实现效果:使用鼠标点击分割线拖动,可实现左右展示框宽度(也可修改为高度)的变化,如下图1、封装组件首先需要封装按钮点击的这条线,计算鼠标点击后滑动的距离:<template><di......
  • Vue 拦截器思路
    //数据响应拦截器,统一处理返回的数据逻辑axios.interceptors.response.use(res=>{if(res&&res.status==HTTP_STATUS.SUCCESS){returnres.data;}els......
  • 【Vue3】本地没问题,部署后 public 下的某些资源 404 不能访问
    如果你本地没问题,线上访问出现404,你得看看你public下面得资源文件夹命名是不是和.gitignore下得配置文件冲突了,我就是命名为dist导致直接被忽略了,重新改了个名字后......
  • vuecli作用域插槽
    <template><divid="app"class="container"><Categorytitle="美食"><templatescope="{games}"><ul><liv-for="(g,inde......
  • vue源码分析-基础的数据代理检测
    简单回顾一下这个系列的前两节,前两节花了大量的篇幅介绍了Vue的选项合并,选项合并是Vue实例初始化的开始,Vue为开发者提供了丰富的选项配置,而每个选项都严格规定了合并的策......
  • vue源码分析-挂载流程和模板编译
    前面几节我们从newVue创建实例开始,介绍了创建实例时执行初始化流程中的重要两步,配置选项的资源合并,以及响应式系统的核心思想,数据代理。在合并章节,我们对Vue丰富的选项......
  • vue源码分析-响应式系统工作原理
    上一章,我们讲到了Vue初始化做的一些操作,那么我们这一章来讲一个Vue核心概念响应式系统。我们先来看一下官方对深入响应式系统的解释:当你把一个普通的JavaScript对象传......