Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子] (3)

正则和数组形式,必须采用v-bind形式来使用。

缓存组件的使用方式: <!-- 逗号分隔字符串 --> <keep-alive include="a,b"> <component :is="view"></component> </keep-alive> <!-- 正则表达式 (使用 `v-bind`) --> <keep-alive :include="/a|b/"> <component :is="view"></component> </keep-alive> <!-- 数组 (使用 `v-bind`) --> <keep-alive :include="['a', 'b']"> <component :is="view"></component> </keep-alive>

但更多场景中,我们会使用keep-alive来缓存路由:

<keep-alive include='a'> <router-view></router-view> </keep-alive> 匹配规则:

首先匹配组件的name选项,如果name选项不可用。

则匹配它的局部注册名称。 (父组件 components 选项的键值)

匿名组件,不可匹配。

比如路由组件没有name选项,并且没有注册的组件名。

只能匹配当前被包裹的组件,不能匹配更下面嵌套的子组件。

比如用在路由上,只能匹配路由组件的name选项,不能匹配路由组件里面的嵌套组件的name选项。

文档:

exclude的优先级大于include

也就是说:当include和exclude同时存在时,exclude生效,include不生效。

<keep-alive include="a,b" exclude="a"> <!--只有a不被缓存--> <router-view></router-view> </keep-alive>

当组件被exclude匹配,该组件将不会被缓存,不会调用activated 和 deactivated。

组件生命周期钩子:

关于组件的生命周期,是时候放出这张图片了:

Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]

这张图片已经讲得很清楚了,很多人这部分也很清楚了,大部分生命周期并不会用到,这里提一下几点:

ajax请求最好放在created里面,因为此时已经可以访问this了,请求到数据就可以直接放在data里面。
这里也碰到过几次,面试官问:ajax请求应该放在哪个生命周期。

关于dom的操作要放在mounted里面,在mounted前面访问dom会是undefined。

每次进入/离开组件都要做一些事情,用什么钩子:

不缓存:
进入的时候可以用created和mounted钩子,离开的时候用beforeDestory和destroyed钩子,beforeDestory可以访问this,destroyed不可以访问this。

缓存了组件:
缓存了组件之后,再次进入组件不会触发beforeCreate、created 、beforeMount、 mounted,如果你想每次进入组件都做一些事情的话,你可以放在activated进入缓存组件的钩子中。

同理:离开缓存组件的时候,beforeDestroy和destroyed并不会触发,可以使用deactivated离开缓存组件的钩子来代替。

触发钩子的完整顺序:

将路由导航、keep-alive、和组件生命周期钩子结合起来的,触发顺序,假设是从a组件离开,第一次进入b组件:

beforeRouteLeave:路由组件的组件离开路由前钩子,可取消路由离开。

beforeEach: 路由全局前置守卫,可用于登录验证、全局路由loading等。

beforeEnter: 路由独享守卫

beforeRouteEnter: 路由组件的组件进入路由前钩子。

beforeResolve:路由全局解析守卫

afterEach:路由全局后置钩子

beforeCreate:组件生命周期,不能访问this。

created:组件生命周期,可以访问this,不能访问dom。

beforeMount:组件生命周期

deactivated: 离开缓存组件a,或者触发a的beforeDestroy和destroyed组件销毁钩子。

mounted:访问/操作dom。

activated:进入缓存组件,进入a的嵌套子组件(如果有的话)。

执行beforeRouteEnter回调函数next。

结语

Vue提供了很多钩子,但很多钩子我们几乎不会用到,只有清楚这些钩子函数的触发顺序以及背后的一些限制等,这样我们才能够正确的使用这些钩子,希望看了本文的同学,能对这些钩子有更加清晰的认识,使用起来更加得心应手。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzggy.html