view生命周期
- view生命周期就是一个view(视图)从生成到被销毁的过程,中间有如下这几个过程,从loadstart开始,到destroy结束
- 为验证生命周期中几种状态的发生的先后顺序,在A页面(sale.itemlist)和B页面(sale.question)的bindEvents属性以及ready中加入标记,如下:
-
这是页面之间的切换,在A页面(sale.itemlist)中使用QApp.router.open方式打开B页面(sale.question)的执行结果:
- view被router.open打开之后,从loadstart到actived之间的状态都会被触发,但是如果使用 view.show方式 打开B页面(sale.question),是从loadstart到show状态被触发,actived状态并没有被触发(在show状态之后,actived状态并没有被触发):
- 在B页面(sale.question)使用router.open方式打开C页面(sale.search),B页面(sale.question)的deactived状态并没有被触发,而之前打开B页面(sale.question)的A页面(sale.itemlist)的deactived状态被触发了:
- 可能发现上面中ready状态被触发了两次
上面的是写在bindEvents里面ready里面的输出,下面的是写在与bindEvents平级的ready中的输出,说明外层的ready是在view的ready状态被触发时执行的 -
到页面显示出来,loadstart到actived状态都被触发过了,下面的3个状态什么时候被触发呢?当页面执行hide或者QApp.router.back方法时,会触发beforeHide和hide方法,如下是在B页面(sale.question)执行hide()方法的控制台输出:
- 那么还剩下一个destroy方法,API中说一般不需用户手动调用,如果想注销一个view可以使用View.prototype.destroy( )方法;感觉如果view不被使用了,会被自动destroy,A页面(sale.itemlist)是base页面的默认显示view:
-
当从my或order页面切换到其他tag时,my或order view就会被destroy掉:
然而默认的视图A页面(sale.itemlist)切换到其他TAG时,并不会被destroy掉;
- 这样整个view的生命周期的各个状态就都被触发过了,实际应用过程中,要注意各个状态的顺序,比如在beforeShow阶段是获取不到show阶段执行后才有的方法或者值。