关于Vue生命周期的思考

作者: 水墨寒 | 来源:发表于2016-03-23 14:03 被阅读7653次

    关于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 会影响子组件的生命周期。

    相关文章

      网友评论

      • 周星星学编程:楼主你好,请问下router指向的是同一组件,组件内的数据是通过vue-resource请求回来的,怎么实现每次router点击的时候都重新请求一次呢?没有数据更新。
      • 45c8a9f290ca: :joy: 我一直是写在 route 里的 怪不得我没遇到这情况
      • wln521:解决了心中的bug,大爱。

      本文标题:关于Vue生命周期的思考

      本文链接:https://www.haomeiwen.com/subject/sawllttx.html