导航守卫以及keep-alive

2020-06-05  本文已影响0人  名字是乱打的

一 什么是导航守卫?

vue-router提供的导航守卫主要用来监听监听路由的进入和离开的.
vue-router提供了beforeEnterafterEnter的钩子函数, 它们会在路由即将改变前和改变后触发.

二 导航守卫的需求例子

我们来考虑一个需求: 在一个SPA应用中, 如何改变网页的标题呢?

网页标题是通过<title>来显示的, 但是SPA只有一个固定的HTML, 切换不同的页面时, 标题并不会改变.

但是我们可以在Vue中<script>内通过JavaScript来修改<title>的内容.window.document.title = '新的标题'.
那么我们如何利用Vue自身的方法进行更改呢?

普通的修改方式:

导航守卫实际应用

我们可以利用beforeEnter来完成标题的修改.
导航钩子的三个参数解析:
使用 如果我们想在一个index.js里使用全局导航守卫不再重新到main.js中去定义的话,需要将router的定义和导出分开eg: 效果图注意地址栏上方标题变化
导航守卫其他内容

关于补充内容可以查看Vue-router官网定义https://router.vuejs.org/zh/guide/advanced/navigation-guards.html

二 .keep-alive

正常情况下,每次我们进入组件都会执行新创建一个组件(created)我们每次离开组件后组件都会被销毁(destroyed),而我们用了keep-alive就不一样了.
keep-alive 是 Vue 内置的一个组件,可以·使被包含的组件保留状态,或避免重新渲染。·
它们有两个非常重要的属性用来控制我们实现哪些组件被缓存哪些不:(不使用的话全部缓存)

使用方法 : router-view 也是一个组件,如果直接被包在 keep-alive 里面,所有路径匹配到的视图组件都会被缓存

需求实例

我们这里有个需求,要求我们点击about时候可以保存home页面的状态,包括子组件的状态。



实现方法:
1:用keep-alive包裹住想长存的界面


2.这里用到了组件内导航守卫

关于keep-alive的两个属性,可以帮助我们控制哪些组件被缓存哪些不

使用者两个属性需要结合我们在导出时候定义的组件名
上一篇下一篇

猜你喜欢

热点阅读