Vue Router 详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue Router 详解相关的知识,希望对你有一定的参考价值。

参考技术A

hash本质上是改变window.location的href属性 ,你只能改变#后面的url片段。 我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新

history接口是HTML5新增的, history 它有五种模式改变URL而不刷新页面.

(1)params 刷新页面参数会丢失

(2)query 刷新页面参数不丢失

全局守卫:

跳转前: router.beforeEach((to,from,next)=>

to: Route : 即将要进入的目标 [路由对象]

from: Route : 当前导航正要离开的路由

next: Function : 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

next() : 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

next(false) : 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

next(\'/\') 或者 next( path: \'/\' ) : 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: \'home\' 之类的选项以及任何用在router-link 的 to prop 或 router.push中的选项。

next(error)导航会被终止且该错误会被传递给 router.onError()注册过的回调

)

跳转后 : router.afterEach((to,from)=>// ...)

beforeEnter: (to, from, next) =>

router.push(url) 导航到新url,向 history栈添加一条新访问记录,等同于window.history.pushState

router.replace(url) 导航到新url,替换 history 栈中当前记录,等同于window.history.replaceState

router.go(n) 在 history 记录中向前或者后退多少步,类似 window.history.go(n)

router.go(1) 在浏览器记录中前进一步,等同于 history.forward()

router.go(-1) 后退一步记录,等同于 history.back()

router.go(0) 刷新当前页面

router.back() 导航回退一步,类似于router.go(-1)

router. forward() 导航前进一步,但是不刷新前进页的表单,类似于router.go(1)

Vue3的vue-router路由详解

这篇文章是接着【三分钟快速搭建Vue3+webpack项目】的内容做的开发,有基础的可以跳过 【三分钟快速搭建Vue3+webpack项目】,直接看以下的内容。

Vue3的vue-router路由详解:

首先安装路由依赖模块:

npm install vue-router@4

所需代码文件如下图:
图1

 

所需要的主要文件:index.html、index.js、App.vue


index.html:模板页面,项目中的代码编译之后都是放入到模板页面中id为app的元素这种。
代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <title>Vue</title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

index.js:创建一个vue应用,将路由放入应用之中,并挂载到模板页面id为app的元素上。
代码如下:

import  createApp  from 'vue'
import  createRouter,createWebHashHistory  from 'vue-router'
import App from './App.vue'

// 1. 定义路由组件:这里直接用的对象数据,也可以导入其他组件。
const Main =  render() return '月影WEB 欢迎大家来学习各种技术知识!' 
const Lists =  render() return '月影WEB-列表页面' 
const Details =  render() return '月影WEB-详情页面' 

// 2. 定义一些路由:每个路由都需要映射到一个组件。
const routes = [
     path: '/', component: Main ,
     path: '/lists', component: Lists ,
     path: '/details', component: Details ,
]

// 3. 创建路由实例并传递 `routes` 配置。
const router = createRouter(
    // 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
    history: createWebHashHistory(),
    routes, // `routes: routes` 的缩写
)

// 4.创建一个vue应用,将App组件和定义的路由放入到vue应用,并挂载到模板页面id为app的元素上。
createApp(App).use(router).mount('#app')

1. 定义路由组件:这里直接用的对象数据,也可以导入其他组件。
const Main = render() return '月影WEB 欢迎大家来学习各种技术知识!'
const Lists = render() return '月影WEB-列表页面'
const Details = render() return '月影WEB-详情页面'

注意:Main、Lists 、Details 定义了三个路由组件,return后面就是每个路由组件展示的UI。

 

2. 定义一些路由:每个路由都需要映射到一个组件。
const routes = [
    path: '/', component: Main ,
    path: '/lists', component: Lists ,
    path: '/details', component: Details ,
]

注意:path是路由路径,也是地址栏会显示的路径,component是放路由组件的,每个路由路径都可以进行组件映射。

 

3. 创建路由实例并传递 `routes` 配置。
const router = createRouter(
    // 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
    history: createWebHashHistory(),
    routes, // `routes: routes` 的缩写
)

注意:这里只做了简单的配置,history是路由的模式,routes放定义的路由,createRouter创建路由实例。

 

4.创建一个vue应用,将App组件和定义的路由放入到vue应用,并挂载到模板页面id为app的元素上。
createApp(App).use(router).mount('#app')

 

App.vue:用来展示不同的路由页面UI。
代码如下:

<template>
    <router-view></router-view>
</template>
<script>
export default 


</script>

注意:<router-view>是用来展示路由对应的组件UI的。
 

启动服务的效果如下:


path: '/', component: Main

 

path: '/lists', component: Lists


path: '/details', component: Details

 

 

关注公众号(月影WEB),了解更多的前后端知识;
欢迎大家关注互相交流学习;

 

以上是关于Vue Router 详解的主要内容,如果未能解决你的问题,请参考以下文章

Vue路由(router)进一步详解

Vue3的vue-router路由详解

vue2.0中router-link详解

Vue Router 详解

Vue-router的API详解

前端技能树,面试复习第 47 天—— Vue-Router 详解