阅读完文档和许多文章和示例后,I've created a test plnkr:
这是一个发出钩子日志的简单应用程序:
@Component({
selector: 'app-root',
template: `
<h5>Lifecycle Events Log</h5>
<ul>
<li *ngFor="let log of logs">
<code>{{ log }}</code>
</li>
</ul>`
})
export class AppComponent implements OnInit {
name = 'Alice';
logs: string[] = [];
showChild = true;
onLog(data) { this.logs.push(data); }
ngOnInit() { this.onLog(`onInit`); }
ngOnChanges() { this.onLog(`ngOnChanges`); }
ngDoCheck() { this.onLog(`doCheck`); }
ngAfterContentInit() { this.onLog(`afterContentInit`); }
ngAfterContentChecked() { this.onLog('afterContentChecked'); }
ngAfterViewInit() { this.onLog(`afterViewInit`); }
ngAfterViewChecked() { this.onLog(`afterViewChecked`); }
ngOnDestroy() { this.onLog(`onDestroy`); }
}
结果:
Lifecycle Events Log
onInit
doCheck
afterContentInit
afterContentChecked
afterViewInit
afterViewChecked
doCheck
afterContentChecked
行。
ngOnChanges
当Angular(重新)设置数据绑定输入时响应 特性
我没有在这里,所以我没有看到这个事件。
ngOnInit
- 文档:&#34;在第一次ngOnChanges()&#34; 之后调用一次。
在我的示例中,我没有发出ngOnChanges
和 ngOnInit
。那么?
ngDoCheck
在每次更改检测运行期间调用。文档也 在ngOnChanges()和ngOnInit()之后立即说&#34; 。&#34;
为什么他们在这里提到ngOnchanges
?它仅在ngOnInit
之后被调用(!)。在我的示例中,我没有发出ngOnChanges
和 ngOnchanges
。那么他们为什么要写&#34; ngOnChanges()
和(!)ngOnInit()
&#34; ?
ngAfterContentInit
- 文档:&#34;在Angular项目之后做出回应 外部内容进入组件的视图。&#34; 。
这涉及被抄袭的组件。
但是我没有在这里进行任何翻译。那么?他们还说:&#34;在Angular 检查投射到组件中的内容后做出响应。&#34; 。
检查什么? ,它不是在文档中写的。
ngAfterViewChecked
- 文档:&#34;在Angular检查后回复 组件的视图和子视图&#34;
再次 - 检查什么?
另外 - 关于测试中的最后两个事件 -
为什么最后再次发出doCheck
和afterContentChecked
?