在ngOnInit()中构造函数和逻辑/函数初始化

时间:2017-09-22 13:28:41

标签: angular ionic-framework ionic2 ionic3

我已阅读constructorngOnInit。我自己得出结论,我们应该在constructorngOnInit中的任何逻辑中进行变量和服务初始化。这对我来说似乎很干净。

以下是我的实施示例。如果我做得对,或者我错误地理解constructorngOnInit,希望得到一些反馈。或者我应该把所有内容都放在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();
    });
}

1 个答案:

答案 0 :(得分:2)

我在文章The essential difference between Constructor and ngOnInit in Angular中描述了constructorngOnInit之间的区别 详细信息和this answer

如果初始化取决于@Input绑定,则只有一个选项 - ngOnInit - 因为绑定在构造函数中不可用。如果它不依赖,那么在构造函数中执行初始化就完全没问题了。事实上,如果您使用输出,那么:

class O {
    @Output ev = new EventEmitter();

仍然编译为

class O {
    constructor() {
        this.ev = new EventEmitter();

但是,一般建议使用ngOnInit进行初始化。通过这种方式,团队中的每个人都知道要查看ngOnInit内部以了解该组件的初始化方式。

因此,如果您对ngOnInit没有任何依赖性,那么您认为它有点主观。