Vue 关于keep-alive 关于activated

翻了下过往的记录,这是我第二次写关于Vue的生命周期的笔记了。长话短说,是今天在做项目app改版的时候发现的一个问题。

要将原本写在底部tab作为入口页面改成以其他链接的方式进入,但是tab入口的页面都是keep-alive包裹的动态组件。如下


  

包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 相似, 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在组件的父组件链中。
当组件在 内被切换,它的 activateddeactivated这两个生命周期钩子函数将会被对应执行。

以上这段内容是来自vue的官方文档,这里已经说明了,被keep-alive包裹的动态组件在切换时会执行的生命周期钩子函数是activateddeactivated

问题就在这里,我要修改的组件原本是在写里面,所以它原本的初始请求数据的方法也是在activated函数里面调用,但因为页面的布局layout和入口都改了,这个组件就不再是写在里面,自然就不会触发activated去请求数据,所以要把原本的activated改成mounted

那么,里面的组件在切换的时候,会不会调用createdmounted呢?
答案是不会。

会缓存被切换掉的组件而不是销毁,当已缓存的组件再次被切换回来的时候,直接激活就可,不需要重新创建和挂载(create和mount),自然不会调用createdmounted这两个钩子函数。

那么,当组件生成时activatedmountedcreated这三个生命周期的钩子函数执行是怎样的?
当然是created--->mounted--->activated

顺手在浏览器打印了一下来验证自己的回答


activated、mounted、created的先后调用顺序

你可能感兴趣的:(Vue 关于keep-alive 关于activated)