一起学学Vue Router 4.X开发中用到的新特性
前言:
vue3发布这么久以来,还没好好梳理过它相关的全家桶,今天我们先聊聊Vue Router 4.X的使用以及新特性!
可以说路由是一个简单又复杂的东西,简单指的是我们日常使用的过程中只是不断的调用它的API,复杂则是我们有的需求场景需要结合路由原理去处理数据等问题,此时我们就不得不对其原理有很深的理解,例如对于History模式和hash模式到底有什么区别,使用history需要做那些处理?他是如何不刷新页面更改我们的路由地址的等等!
一、安装并使用
// 安装vue-router@4 - 可以根据自己的工具使用安装 yarn add vue-router@4 // 使用vue-router@4 // 使用vue创建的app安装我们对应的路由。具体路由配置参考目录(二) vueApp.use(router); // 前提是我们已经配置好了路由并使用createRouter生成了我们的路由对象
二、声明路由
import VueRouter from "vue-router"; // 1. 定义路由组件. // 也可以从其他文件导入 // 此处的逻辑,大佬一点的都知道,其实我们的vue组件其实就是一个对象,每个vue组件中其实都有template,我就不多做献丑。 const Home = { template: '<div>Home</div>' } const About = { template: '<div>About</div>' } // 2. 定义一些路由 // 每个路由都需要映射到一个组件。 // 我们后面再讨论嵌套路由。 const routes = [ { path: '/', component: Home }, { path: '/about', component: About }, ] // 3. 创建路由实例并传递 `routes` 配置 // 你可以在这里输入更多的配置,但我们在这里 // 暂时保持简单 const router = VueRouter.createRouter({ // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。 history: VueRouter.createWebHashHistory(), routes, // `routes: routes` 的缩写 }) // 去使用router
路由管理配置也是个学问,当我们的项目庞大以后如何还能保证我们的路由清晰且高维护???
三、createRouter的变化
#createWebHistory
export declare function createWebHistory(base?: string): RouterHistory
此方法创建一个最常见的历史记录。
还有SEO对我们很重要的时候我们需要使用此函数创建路由!!!
它的参数表示我们的资源访问存储在服务器的具体位置
createWebHistory('/goods/') // 表示我们需要使用http://127.0.0.1/goods/xxx去访问我们的项目,此处的ip可以是我们服务器的域名或者本地的服务端口名称,它一定是由http提供服务的!
#createWebHashHistory
export declare function createWebHashHistory(base?: string): RouterHistory
方法参数与createWebHistory出入不大,但是此处如果我们没有提供hash标识他会自动为我们的路由加上 ’#‘
createWebHashHistory('/folder/') // 给出的网址为 `https://baidu.com/folder/#` createWebHashHistory('/folder/#/app') // 给出的网址为 `https://baidu.com/folder/#/app` // at file:///base/index.html createWebHashHistory('/file') // 给出的网址为 `file:///base/index.html#`
此方式支持file:///xxx 的访问方式,但是会忽略掉我们的base参数。
#createMemoryHistory
export declare function createMemoryHistory(base?: string): RouterHistory
此方法创建一个基于内存的历史纪录,通常是为了处理我们的SSR的时候使用的,它可以在任意位置开始,判断上下文中不存在则直接调用push or replace直接将当前位置设为开始位置!
四、其他要点
impot { START_LOCATION, useRouter, useRoute } from 'vue-router'; START_LOCATION // 主要用于判断我们路由初始的位置信息,与守卫路由中的from是相等的 ! useRouter() // 获取路由的能力调用其返回值可以使用路由api 类似以前的this.$router; useRoute() // 获取当前页面的路由信息,包含query,params,meta等数据信息。 // tips 还有我们需要对路由全局路由编码以及解码自定义的时候可以在createRouter的时候 parseQuery,stringifyQuery,去做一个全局的配置!