为什么要使用ngOnInit,如果我们已经有了constructor?
一个(构造函数)与类实例相关,与Angular2无关。我的意思是可以在任何类上使用构造函数。你可以在这里为新创建的实例进行一些初始化处理。
第二个对应于Angular2组件的生命周期website:
引自官方的网站:
所以你应该使用,ngOnInit如果初始化处理依赖于组件的绑定(例如组件的参数定义@Input),否则构造就足够了...
我认为最好的例子是使用服务。假设我想在组件获取“激活”时从服务器获取数据。假设我在从服务器获取数据之后还想对数据做一些额外的事情,也许我得到一个错误,并希望以不同的方式记录。
使用ngOnInit通过构造函数很容易,它也限制了我需要添加到我的应用程序的多少个回调层。
例如:
export class Users implements OnInit{
user_list: Array<any>;
constructor(private _userService: UserService){
};
ngOnInit(){
this.getUsers();
};
getUsers(){
this._userService.getUsersFromService().subscribe(users => this.user_list = users);
};
}
用我的构造函数,我可以调用我的_userService并填充我的user_list,但也许我想用它做一些额外的事情。像确保一切都是upper_case,我不完全确定我的数据是如何通过。
所以它使得使用ngOnInit更容易。
export class Users implements OnInit{
user_list: Array<any>;
constructor(private _userService: UserService){
};
ngOnInit(){
this.getUsers();
};
getUsers(){
this._userService.getUsersFromService().subscribe(users => this.user_list = users);
this.user_list.toUpperCase();
};
}
这使得它更容易看到,所以我只是在我的组件中调用我的函数,而不是在其他地方挖掘它。真的,这只是另一个工具,你可以使它更容易阅读和使用在未来。另外,我发现把一个函数调用放在一个构造函数中真的是不好的做法!