我已阅读constructor
和ngOnInit
。我自己得出结论,我们应该在constructor
和ngOnInit
中的任何逻辑中进行变量和服务初始化。这对我来说似乎很干净。
以下是我的实施示例。如果我做得对,或者我错误地理解constructor
和ngOnInit
,希望得到一些反馈。或者我应该把所有内容都放在ngOnInit
上。
constructor(
public loading: LoadingController,
public auth: AuthService,
public data: DataService
) {
this.existingProfile = new EventEmitter<Profile>();
this.loader = this.loading.create({
content: 'Loading...'
});
}
ngOnInit() {
this.loader.present();
this.data.getProfile().subscribe(profile => {
this.userProfile = profile;
this.existingProfile.emit(this.userProfile);
this.loader.dismiss();
});
}
答案 0 :(得分:2)
我在文章The essential difference between Constructor and ngOnInit in Angular中描述了constructor
和ngOnInit
之间的区别
详细信息和this answer。
如果初始化取决于@Input
绑定,则只有一个选项 - ngOnInit
- 因为绑定在构造函数中不可用。如果它不依赖,那么在构造函数中执行初始化就完全没问题了。事实上,如果您使用输出,那么:
class O {
@Output ev = new EventEmitter();
仍然编译为
class O {
constructor() {
this.ev = new EventEmitter();
但是,一般建议使用ngOnInit
进行初始化。通过这种方式,团队中的每个人都知道要查看ngOnInit
内部以了解该组件的初始化方式。
因此,如果您对ngOnInit
没有任何依赖性,那么您认为它有点主观。