view生命周期总结

view生命周期

  1. view生命周期就是一个view(视图)从生成到被销毁的过程,中间有如下这几个过程,从loadstart开始,到destroy结束
    view生命周期总结_第1张图片
    view_life_0.jpg
  2. 为验证生命周期中几种状态的发生的先后顺序,在A页面(sale.itemlist)和B页面(sale.question)的bindEvents属性以及ready中加入标记,如下:
    view生命周期总结_第2张图片
    view_life.jpg
  3. 这是页面之间的切换,在A页面(sale.itemlist)中使用QApp.router.open方式打开B页面(sale.question)的执行结果:


    view生命周期总结_第3张图片
    view_life_1.jpg
  4. view被router.open打开之后,从loadstart到actived之间的状态都会被触发,但是如果使用 view.show方式 打开B页面(sale.question),是从loadstart到show状态被触发,actived状态并没有被触发(在show状态之后,actived状态并没有被触发):
    view生命周期总结_第4张图片
    Paste_Image.png
  5. 在B页面(sale.question)使用router.open方式打开C页面(sale.search),B页面(sale.question)的deactived状态并没有被触发,而之前打开B页面(sale.question)的A页面(sale.itemlist)的deactived状态被触发了:
    view生命周期总结_第5张图片
    Paste_Image.png
  6. 可能发现上面中ready状态被触发了两次
    view生命周期总结_第6张图片
    Paste_Image.png

    上面的是写在bindEvents里面ready里面的输出,下面的是写在与bindEvents平级的ready中的输出,说明外层的ready是在view的ready状态被触发时执行的
  7. 到页面显示出来,loadstart到actived状态都被触发过了,下面的3个状态什么时候被触发呢?当页面执行hide或者QApp.router.back方法时,会触发beforeHide和hide方法,如下是在B页面(sale.question)执行hide()方法的控制台输出:


    Paste_Image.png
  8. 那么还剩下一个destroy方法,API中说一般不需用户手动调用,如果想注销一个view可以使用View.prototype.destroy( )方法;感觉如果view不被使用了,会被自动destroy,A页面(sale.itemlist)是base页面的默认显示view:
    view生命周期总结_第7张图片
    Paste_Image.png
  9. 当从my或order页面切换到其他tag时,my或order view就会被destroy掉:


    view生命周期总结_第8张图片
    Paste_Image.png

    然而默认的视图A页面(sale.itemlist)切换到其他TAG时,并不会被destroy掉;

  10. 这样整个view的生命周期的各个状态就都被触发过了,实际应用过程中,要注意各个状态的顺序,比如在beforeShow阶段是获取不到show阶段执行后才有的方法或者值。

你可能感兴趣的:(view生命周期总结)