关于Vue生命周期的思考[zzky]

1228 查看

关于Vue生命周期的思考

关于Vue组件生命周期,官方图示:

在开发过程中遇到关于生命周期的问题,整理分享下:

Vue-router跳转同名路径的问题

问题来自:vue-router 跳转同名路径的问题

在社区交流中对于新手经常遇到这个问题。为什么跳转相同路由不能跳转?对于新手来说,跳转和不跳转的区别在于数据有没有更新。

新手在用Vue-router 的时候,没有关注当前Vue实例(vm)中添加route 。回归到话题问题当访问.../page/110这个路由的时候,<router-view ></router-view> 开始装载Vue-router 中注册page对应Vue实例。 我们先约定是 page.vuepage.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 会影响子组件的生命周期。