vuerouter(vue router中文文档)

本篇文章给大家谈谈vuerouter,以及vue router中文文档对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

VueRouter的基本使用

1.导入vue-router.js文件,必须插入到vue.js文件后面

2.定义路由规则

4.将创建好的路由对象绑定到Vue实例上

5.修改URL哈希值

6.通过router-view渲染扮橡匹配的组件

7.css样式

router-link标签:Vue Router中提供专门用于设置哈希值大猜的标签;

router-view标签:Vue Router中提供专门用于将路由匹配到的组件渲厅仿旁染到指定位置;

2.给router-link设置选中样式

默认情况下我们可以通过重写router-link -active类名来实现设置选中样式,但是我们也可以通过linkActiveClass来指定选中样式;

案例: 在one界面中又有两个按钮,通过这两个按钮进一步 切换one中的内容

[img]

Vue Router 详解

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)

vue-router原理详解

首先vue-router实现了 在无需刷新页面的情况下更饥漏悉新视搜含图

对比:location.href=""实现了跳转但是刷新了页面

在浏览器环境下的两种方式,分别就是在HTML5History,HashHistory两个类中实现的。

两个模式hash和history

原理:

移动端采用WebView加载Vue单页应用时,要采用hash模式

解释:

我们理想的情况是通过index.html进入页面,后续的操作都由ajax完成,但是如果遇到用户直接在地址栏中输入然后回车或者强行重新加载等操作

通过上面例子,我们可以知道history模式会像服务器发起请求,这时如果服务端没有匹配的路由处理,则报错;如果请求了某一个接口的数据,则有可能显示返回值json串。

解决方案:

a. 前端设置一个通用烂乎路由重定向到html页

b. 后端在接收到没有配置的请求的时候返回401或别的状态码

c. 使用token

Vue-Router路由钩子函数(导航守卫)

  —— “导航”表示路由正在发生改变。

路由钩子函数有三种:

            1:全局钩子: beforeEach、 afterEach、beforeResolve

            2:单个路由里面的钩子:  beforeEnter

            3:组件路由:beforeRouteEnter、 beforeRouteUpdate、 beforeRouteLeave

无论访问哪一个路径,都会触发全局的钩子函数,位置是调用router的方法

router.beforeEach() 进入之前触发

router.afterEach() 进入之后触发

⑴ beforeEach(全局前置守卫)

使用 router.beforeEach 注册一个全局前置守卫

每个守卫方法接收三个参数:

① to: Route : 即将要进入的目标 路由对象 (to是一个对象,是将要进入的路由对象,可以用 to.path 调用路由对象中的属性)

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

③ next: Function : 这是一个必须需要调用的方法,执行效果依赖 next 方法的调用参数。

next参数:

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

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

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

    next(error) : (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航含亮会被终止且该错误会被传递给 router.onError() 注册过的回调。

ps~ : 确保要调用 next 方法,否则钩子就不会被 resolved。

(2). afterEach(全局后置钩子)

和守卫不同的是厅老历,这些钩子不会接受 next 函数也不会改变导航本身

写在路由配置中,只有访问到这个路径,才能触发钩子函数

写在组件中,访问路径,即将渲染组件的时候触发的

beforeRouteEnter 守卫 不能 访问 this ,因为守卫在导航确认前被调用,因此即将登场的新组件还没被创建。不过,你可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

注意~ : beforeRouteEnter 是支持给 next 传递回调的唯一守卫。对于 beforeRouteUpdate 和 beforeRouteLeave 来说,this 已经可用了,所以 不支持 传递回调,因为没有必要了。

这个 离开守卫beforeRouteLeave() 通常用来禁止用户在还未保存修改前突然离开。该导航可以通过 next(false) 来取消。

1.导航被触发。

2.在失活的组件里调用离开守卫。

3.调用全局的 beforeEach 守卫。

4.在重用的组件里调用 beforeRouteUpdate 守卫 (2.2+)。

5.在路由配置里调用 beforeEnter。

6.解析异步路由组件。

7.在被激活的组件里调用 beforeRouteEnter。

8.调用全局的 beforeResolve 守卫 (2.5+)。

9.导航被确认。

10.调用全局的 afterEach 钩子。

11.触发 DOM 更新。

12.用创建好的实例调用 beforeRouteEnter 守卫中传给 next 的回调函数。

vue-router导航守卫之实战篇

官方这么说:

好吧,看不懂,就好(当)好(废)理(话)解(吧)下。其实,导航守卫就是路由跳转过程中的一些钩子函数,再直白点路由跳转是一个大的过程,这个大的过程分为跳转前中后等等细小的过程,在每一个过程中都有一函数,这个函数能让你操作一些其他的事儿的时机,这就是导航守卫。

先看一个钩子函数执行后输出的顺序截图吧,一般讲解都会在之后呈现,给大家换种思路(也就是先预习再学习最后复习)

[图片上传失败...(image-b044c6-1632499247491)]

好吧不知道的估计看不懂吧!不过我希望你能看到一个点能多倒回来看看这个顺序,前方干货预警

导航守卫分为 :全局的、单个路由独享的、组件内的三种。分别来看一下:

【全局的】敏嫌:是指路由实例上直接操作的钩子函数,他的特点是所有路由配置的组件都会触发,直白点就是触发路由就会触发这些钩子函数,如下的写法。钩子函数按执行顺序包括beforeEach、beforeResolve(2.5+)、afterEach三个(以下的钩子函数都是按执行顺序讲解的):

[beforeEach]:在路由跳转前触发,参数包括to,from,next(参数会单独介绍)三个,这个钩子作用主要是用于登录验证,也就是路由还没跳转提前告知,以免跳转了再通知就为时已晚。

[beforeResolve](2.5+):这个钩子和beforeEach类似,也是路由跳转前触发,参数也是to,from,next三个,和beforeEach区别官方解释为:

即在 beforeEach 和 组件内beforeRouteEnter 之后,afterEach之前调用。

[afterEach]:和beforeEach相反,他是在路由跳转完成后触发,参数包括to,from没有了next(参数会单独介绍),他发生在beforeEach和beforeResolve之后,beforeRouteEnter(组件内守卫,后讲)之前。

【路由独绝毁享的】是指在单个路由配置的时候也可以设置的钩子函数,其位置就是下面示例中的位置,也就是像Foo这样的组件都存在这样的钩子函数。目前他只有一个钩子函数beforeEnter:

[beforeEnter]:和beforeEach完全相同,如果都设置则在beforeEach之后紧随执行,参数to、from、next

【组件内的】:是指在组件内执行的钩子函数,类似于组件内的生命周期,相当于为配置路由的组件添加的生命周期钩子函数。钩子函数按执行顺并拿备序包括beforeRouteEnter、beforeRouteUpdate (2.2+)、beforeRouteLeave三个,执行位置如下:

[beforeRouteEnter]:路由进入之前调用,参数包括to,from,next。该钩子在全局守卫beforeEach和独享守卫beforeEnter之后,全局beforeResolve和全局afterEach之前调用,要注意的是该守卫内访问不到组件的实例,也就是this为undefined,也就是他在beforeCreate生命周期前触发。在这个钩子函数中,可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数,可以在这个守卫中请求服务端获取数据,当成功获取并能进入路由时,调用next并在回调中通过 vm访问组件实例进行赋值等操作,(next中函数的调用在mounted之后:为了确保能对组件实例的完整访问)。

[beforeRouteUpdate] (v 2.2+):在当前路由改变时,并且该组件被复用时调用,可以通过this访问实例。参数包括to,from,next。可能有的同学会疑问,what is 路由改变 or what is 组件被复用?

[beforeRouteLeave]:导航离开该组件的对应路由时调用,可以访问组件实例 this ,参数包括to,from,next。

至此,所有钩子函数介绍完毕。

屡一下哈:

全局路由钩子:beforeEach(to,from, next)、beforeResolve(to,from, next)、afterEach(to,from);

独享路由钩子:beforeEnter(to,from, next);

组件内路由钩子:beforeRouteEnter(to,from, next)、beforeRouteUpdate(to,from, next)、beforeRouteLeave(to,from, next)

不知道你是否还记得to、from、next这三个参数

下面请重头把这几个钩子函数的参数看一遍,细心的同学可以看见在afterEach钩子中参数没有next,为什么呢?

to:目标路由对象;

from:即将要离开的路由对象;

next:他是最重要的一个参数,他相当于佛珠的线,把一个一个珠子逐个串起来。以下注意点务必牢记:

1.但凡涉及到有next参数的钩子,必须调用next() 才能继续往下执行下一个钩子,否则路由跳转等会停止。

2.如果要中断当前的导航要调用next(false)。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。(主要用于登录验证不通过的处理)

3.当然next可以这样使用,next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。意思是当前的导航被中断,然后进行一个新的导航。可传递的参数与 router.push 中选项一致。

4.在beforeRouteEnter钩子中next((vm)={})内接收的回调函数参数为当前组件的实例vm,这个回调函数在生命周期mounted之后调用,也就是,他是所有导航守卫和生命周期函数最后执行的那个钩子。

5.next(error): (v2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 [router.onError()]() 注册过的回调。

好了,还记得那个截图吗,我们再看一遍

[图片上传失败...(image-940ea2-1632499247491)]

我们最后屡一下顺序:

当点击切换路由时:beforeRouterLeave--beforeEach--beforeEnter--beforeRouteEnter--beforeResolve--afterEach--beforeCreate--created--beforeMount--mounted--beforeRouteEnter的next的回调

当路由更新时:beforeRouteUpdate

关于vuerouter和vue router中文文档的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表