关于Vue组件生命周期,官方图示:
在开发过程中遇到关于生命周期的问题,整理分享下:
Vue-router跳转同名路径的问题
问题来自:vue-router 跳转同名路径的问题
在社区交流中对于新手经常遇到这个问题。为什么跳转相同路由不能跳转?对于新手来说,跳转和不跳转的区别在于数据有没有更新。
新手在用Vue-router 的时候,没有关注当前Vue实例(vm)中添加route
。回归到话题问题当访问.../page/110
这个路由的时候,<router-view ></router-view>
开始装载Vue-router 中注册page对应Vue实例。 我们先约定是 page.vue
:page.vue
开始它的生命周期,如果没有使用过Vue-route会根据经验把数据更新写到 created 或者 ready 阶段。路由切换了,但是created ready 阶段都过了,装数据的盒子准备好了。但是数据更新的时期过了导致不能更新。
这时候,我们需要把数据更新的时机换到路由切换的时候。
如下代码:
export default {
...
route: {
data(transition) {
//更新数据的方法
}
}
...
};
这样路由切换的时候,更新数据,也就是所谓的跳转了。
注意:更新params query 都适用
利用v-if强制结束组件的生命周期
基于上面如何更新子组件?一般情况下,同样更新数据放倒 route.data 中即可,向子组件中传递数据。随着route切换更新子组件数据。
开发过程中,遇到的一个特殊的例子。把轮播图做成组件,在这个组件中ready后,开始使用轮播插件。轮播插件是会破坏html结构。导致不能数据更新的时候,不能更新View。这时候解决办法是再让子组件带着新数据走一轮生命周期。
如何强制更新组件的生命周期?解决办法是 route.data 数据更新的时候。让子组件 v-if="false"
,异步获取数据之后,再 v-if="true"
。
说了一堆废话,汇总下:v-if 会影响子组件的生命周期。