加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular4学习笔记——生命周期钩子

发布时间:2020-12-17 08:36:39 所属栏目:安全 来源:网络整理
导读:接口和钩子 在介绍生命周期的相关概念之前,可以先复习一下TypeScript对于接口的概念。 在这里主要使用的是类接口及其实现: interface ClockInterface { currentTime: Date;}// 该写法表示明确的强制一个Clock类符合ClockInterface接口// 该接口中currentTi

接口和钩子

在介绍生命周期的相关概念之前,可以先复习一下TypeScript对于接口的概念。
在这里主要使用的是类接口及其实现:

interface ClockInterface {
    currentTime: Date;
}
// 该写法表示明确的强制一个Clock类符合ClockInterface接口
// 该接口中currentTime是一个Date类型的数据(并没有实际使用),创造Clock实例时需要传入参数h和m,都是数字类型。
class Clock implements ClockInterface {
    currentTime: Date;
    constructor(h: number,m: number) { }
}

在Angular中,也针对生命周期的不同时刻给予了一些接口,你可以在代码中强制自己的组件/指令在创建时实现这些接口。
而每个接口都有唯一的一个钩子方法,它们的名字是由接口名再加上ng前缀构成的。比如,OnInit接口的钩子方法叫做ngOnInit,Angular在创建组件后立刻调用它。

接口是可选的?

由于我们最终执行的代码是JavaScript,而在JS中是没有接口概念的,接口只是用来强化类的概念,经过编译之后接口消失了。
所以如果需要使用生命周期,只要在我们的代码中写上钩子函数即可,Angular会找到并调用像ngOnInit()这样的钩子方法,有没有接口无所谓。
但是最好在写代码的时候不要省去接口,享受TypeScript所带来的强类型好处~~~

生命周期的顺序

指令和组件的实例有一个生命周期:新建、更新和销毁。
当Angular使用构造函数新建一个组件或指令后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法:

ngOnChanges()

用处:当Angular设置数据绑定输入属性发生变化时响应。
时机:当被绑定的输入属性的值发生变化时调用,不过首次调用是会发生在ngOnInit()之前的。
ngOnChanges()方法获取了一个对象,它可以同时观测1个/多个绑定的属性值,它把每个发生变化的属性名都映射到了一个SimpleChange对象, 该对象中有属性的当前值和前一个值。

// Angular定义SimpleChanges类构造函数三个参数分别为上一个值,当前值和是否第一次变化(firstChange: boolean),这些changes都可以调用。
ngOnChanges(changes: SimpleChanges) {
  ... some code about changes here...
}

ngOnInit()

用处:在Angular第一次显示数据绑定和设置指令/组件的输入属性之后,初始化指令/组件。
时机:在第一轮ngOnChanges()完成之后调用,只调用一次。
要明确一点就是,虽然接口中有一个constructor构造函数,但是在这里最好只对局部变量进行初始化之外什么都不做,通过ngOnInit()获取初始数据,而且是放在构造函数后面。

ngDoCheck()

用处:检测那些Angular自身无法捕获的变更
时机:在每个Angular变更检测周期中调用,ngOnChanges()和ngOnInit()之后。
谨慎使用,因为一些你意想不到的事情也会被视为变更了

ngAfterContentInit()和ngAfterContentChecked()

只适用于组件
用处:在外来内容被投影到组件中之后/投影组件内容的变更检测之后调用
时机:
ngAfterContentInit()--第一次ngDoCheck()之后调用,且只调用一次;
ngAfterContentChecked()--每次ngDoCheck()之后调用,如果需要调用ngAfterContentInit(),则在ngAfterContentInit()调用之后

ngAfterViewInit()和ngAfterViewChecked()

只适用于组件
用处:初始化完/检测变更完组件视图及其子视图之后调用。
时机:跟相应的content钩子类似,在对应的content钩子后面。

ngOnDestroy

用处:反订阅可观察对象和分离事件处理器,以防内存泄漏
时机:销毁指令/组件之前调用并清扫

释放那些不会被垃圾收集器自动回收的各类资源的地方。取消那些对可观察对象和DOM事件的订阅。停止定时器。注销该指令曾注册到全局服务或应用级服务中的各种回调函数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读