当前位置: 首页 > Web前端 > HTML5

再来说说ionic3[3]页面的生命周期事件,也就是世界上的hook

时间:2023-04-05 22:30:13 HTML5

首先,我要真诚的道歉。感谢好心的读者不脱粉(貌似只有50个粉)。在本节中,我们继续上一节中创建的页面来讨论生命周期挂钩。根据我的经验,大多数学生都知道这个概念。如果你不太了解它,那么你一定知道浏览器在完成加载网页时会触发一个onload事件。通常我们使用window.onload或jquery中的$(document).load()方法来定义网页加载时应该做些什么。在一个APP中,这样的事件是比较丰富的。很多时候,你必须在用户看到页面之前为用户做一些事情,最常见的就是从服务器拉取数据;或者在他们离开页面时做一些处理。1.了解ionic的生命周期钩子从ionic的3.8.0版本开始,框架提供了8个钩子函数,会在页面生命周期的各个阶段触发。让我们简单地看一下。1.1ionViewDidLoad在页面加载时触发。这里的“loaded”是指页面需要的资源已经加载完毕,但是页面还没有进入状态(用户看到的还是之前的页面)。需要注意的是,这是一个非常狂妄的钩子。整个过程只会调用一次,即第一次进入页面时调用。之后无论你怎么进出,都是冷清凄惨,再也不会理你。.除非杀掉它的后台,重新进入软件(调试网页时按刷新也是可以的)。所以这个钩子适合你做一些一次性的处理,比如从服务器拉取用户数据,存入缓存。1.2ionViewWillEnter的字面意思是“我进来了”的瞬间,页面刚开始切换的时候。这个时候可以对页面的数据进行预处理,每次都会调用这个钩子。1.3ionViewDidEnter当触发这个钩子时,用户进入了一个新的页面(页面处于活动状态),也是每次都会调用。说到这里,不得不插一句。ionic对hooks的命名对于广大中国同学来说真的是很友好。一个意志和一个行动将解决问题。不像外面一些风骚的(错误的)框架,一堆ready,update,complied,destroy等等,rememberonceandforgetonce。(当然这是个玩笑,组件的命名与框架的运行机制密切相关。)1.4ionViewWillLeave当页面即将离开时触发,用户刚刚触发了后退按钮或相关事件。1.5ionViewDidLeave当页面离开(已经完成)并且页面处于非活动状态时触发。1.6当ionViewWillUnload页面中的资源即将被销毁时触发。这时你会不会猜到这个hook和ionViewDidLoad一样只会触发一次?1.7测试我们直接使用上一节制作的页面来测试钩子的加载。上一节我们实现了使用按钮从HomePage跳转到TestPage的过程。现在我们将以上六个钩子添加到TestPage中,并通过控制台观察它们的调用情况。页面主题部分代码如下exportclassTestPage{title:string;构造函数(公共navCtrl:NavController,公共参数:NavParams,公共alertCtrl:AlertController){this.title=this.params.get('title');console.log('触发构造器');}popPage(){this.navCtrl.pop();}//沟儿子ionViewDidLoad(){console.log('触发ionViewDidLoad');}ionViewWillEnter(){console.log('触发ionViewWillEnter');}ionViewDidEnter(){console.log('触发ionViewDidEnter');}ionViewWillLeave(){console.log('触发ionViewWillLeave');}ionViewDidLeave(){console.log('触发ionViewDidLeave');}ionViewWillUnload(){console.log('触发ionViewWillUnload');}}请注意,我还在构造函数中添加了一条测试语句。打开Servedebugging,点击按钮,进入TestPage,观察控制台输出的内容。返回主页并观察控制台输出的内容。再次进入和离开TestPage,观察控制台输出的内容。可以得出以下结论:构造函数在ionViewDidLoad之前触发ionViewDidLoad只有在第一次进入页面时才会触发ionViewWillUnload每次离开页面后都会触发2.还有我一开始提到的两个guardhooksionic提供了8个hook,我只介绍了6个。前6个钩子有一个共同点。它们的返回值都是void,即在相应的时刻被调用,不会返回任何信息。另外两个钩子有些不同,它们是ionViewCanEnter和ionViewCanLeave,它们可以返回一个布尔值。看,我们刚刚谈到了时态,现在我们要谈谈情态动词。如果说前6个钩子是页面对用户访问的被动响应,那么现在页面是有意识的,可以让你来,也可以让你走,啊,页面从此站起来了!这两个钩子更多的是起到了权限控制的作用。最近有一个很时髦的名词叫守卫(Guard)。你怎么理解这个守卫?你可以理解为小区的守门人、和蔼可亲的班主任、古杏花楼的老鸨2333。现在我们知道它可以返回一个布尔值,让我们试试看。因为我们的程序中没有业务逻辑,这里就用一个时间API来判断吧。写这篇文章的时候是晚上11点,所以用getHours来帮我们测试一下。//和蔼可亲的班主任ionViewCanEnter():boolean{if(newDate().getHours()>=8){console.log('怎么回事,看看现在几点了,怎么不继续在家睡的舒服就给我站在门外!');返回假;}返回真;}//杏花楼挑逗老鸨ionViewCanLeave():boolean{if(newDate().getHours()>=22){console.log('哎呀,这么晚了,最近外面风这么大,怎么不去'你就跟我们呆着吧,你看姑娘们都不舍得让你回去');返回假;}返回真;}同样的,如果你想离开页面,如果ionViewCanLeave返回false,你就会被屏蔽。3总结咳咳,废话不多说,总结一下,ionic有如下生命周期hookionViewDidLoad第一次调用返回voidionViewWillEnter,每次调用返回voidionViewDidEnter,每次调用返回voidionViewWillLeave,每次调用返回voidionViewDidLeave,每次调用返回voidionViewWillUnloadCall返回voidionViewCanEnter每次调用返回booleanionViewCanLeave每次调用返回boolean