angular

实现

首先实现方式不用多说,使用钩子函数需要在定义的时候实现对应的接口

export class listpage implements oninit {
  constructor() {}

  ngoninit() {
    // code here
  }
}

调用顺序

1、constructor

最先执行的是构造函数,在执行构造函数的时候,@input、@viewchild等很多变量都是不存在的,相关操作最好写在ngoninit里。

2、ngonchanges

当前组件@input/@output的绑定值发生变化时会触发。
另外如果@input是对象,只有引用发生变化的情况下才会触发。

3、ngoninit

在第一次 ngonchanges 完成后调用,只会执行一次

4、ngdocheck

开发者自定义变更检测。

5、ngaftercontentinit

组件内容初始化的时候执行一次

6、ngaftercontentchecked

投射到组件的内容每次ngdocheck调用后触发。

7、ngafterviewinit

组件及其子组件视图初始化的时候执行一次

8、ngafterviewchecked

组件及其子组件视图每次ngdocheck调用后触发。

9、ngondestroy

在组件销毁前调用。

注意

  • 并不是所有的数据在constructor里都存在,@viewchild @viewchildren @input等值都还没绑定
  • 任何的变更检测都会触发ngdocheck,详见 非常消耗性能,需要小心使用

ionic

原文档可以点上面的链接看到,挑重点说一下。

生命周期如图,除了angular提供的生命周期,ionic添加了几个事件:

  • ionviewwillenter 路由组件即将显示到视图
  • ionviewdidenter 路由组件已经显示到视图

在ngoninit之后触发ionviewwillenter,页面切换的过渡效果结束之后触发ionviewdidenter

  • ionviewwillleave 即将离开当前路由的组件
  • ionviewdidleave 已经离开当前路由的组件

先调用ionviewwillleave,直到成功过渡到新页面之后(在新页面ionviewdidenter触发之后),ionviewdidleave才被调用。

使用ion-nav或ion-router-outlet的组件不应使用onpush变化检测策略,这样会导致ngoninit之类的生命周期hooks无法触发。另外,异步变化的数据可能不能正确渲染。

ionic是怎么处理页面的生命周期的

ionic使用的路由出口是<ion-router-outlet />,它拓展了angular的<router-outlet />,可以在移动设备上有更好体验。

从一个页面跳转到一个新页面的时候,ionic会把旧页面保存在dom中,并且从视图上隐藏。这样可以保持住上一个页面的状态,比如滚动位置、页面数据,这样从新页面返回到上一个页面的时候,就不用重新加载一次,页面过渡也比较平滑。

页面只有从堆栈中退出的时候,才会真正销毁,所以ngoninit 和ngondestroy 触发的时机和想象中可能不太一样。

比如a是详情页,进入b页面修改数据。修改完成后从b页面返回a页面。
如果a页面的数据获取方法是写在ngoninit里的,那么从b返回到a的时候,因为ngoninit是不会触发的,显然不符合业务要求。
所以这个数据的获取可以写在ionviewwillenter里,这样从b返回a的时候就可以触发并更新

路由守卫

ionic 3里曾经有过ionviewcanenter 和ionviewcanleave两个钩子函数,用来判断页面是否可以进入/离开,一般用来限制访问权限 或者离开编辑页面之前弹出二次确认提示。这两个函数已经废弃了,ionic 4以后使用angular官方的路由守卫。

总结

到此这篇关于angular和ionic生命周期和钩子函数的文章就介绍到这了,更多相关angular ionic生命周期和钩子函数内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!