Angular 2和Ionic 2:构造函数、IoninViewDidLoad和ngOnInit方法之间有什么区别
构造函数、ionViewDidLoad和ngOnInit方法之间有什么区别。Angular 2和Ionic 2:构造函数、IoninViewDidLoad和ngOnInit方法之间有什么区别,angular,ionic2,Angular,Ionic2,构造函数、ionViewDidLoad和ngOnInit方法之间有什么区别。 在每种情况下,哪些操作是合适的。关于ionic2的构造函数:简单地说,我们使用它来创建插件、服务等的实例。例如:您有一个页面(视图),其中您要显示所有学生的列表,您有一个包含所有学生的json文件(此文件是您的数据文件)你要做的是在这个服务中创建一个服务,你将创建一个方法并点击一个http.get请求来获取json数据,那么这里你需要什么http只需这样做: import {Http} from '@angular/h
在每种情况下,哪些操作是合适的。关于ionic2的
构造函数
:简单地说,我们使用它来创建插件、服务等的实例。例如:您有一个页面(视图),其中您要显示所有学生的列表,您有一个包含所有学生的json文件(此文件是您的数据文件)你要做的是在这个服务中创建一个服务,你将创建一个方法并点击一个http.get
请求来获取json数据,那么这里你需要什么<代码>http只需这样做:
import {Http} from '@angular/http';
@Injectable()
export class StudentService{
constructor(public http: Http){}
getAllStudents(): Observable<Students[]>{
return this.http.get('assets/students.json')
.map(res => res.json().data)
}
}
再次注意这里的构造函数,我们正在构造函数中创建StudentService的实例,还有一件事,我们正在使用SocialShareing插件,以便使用它,我们也在构造函数中创建StudentService的实例
OnInit
:这在ionic2或AngularJs2中确实是一件令人惊奇的事情。通过上面相同的示例,我们可以看到什么是ngOnInit
。
因此,您已经准备好使用服务方法,现在在视图/页面中,您希望学生列表数据在视图即将出现时立即可用,这应该是加载时自动执行的第一个操作,因为在视图加载时,学生列表应该是可见的。因此,该类实现了OnInit
,您可以定义ngOnInit
。例如:
export class HomePage implements OnInit {
...
....
constructor(....){}
ngOnInit(){
this._studentService.getAllStudents().subscribe(
(students: Students[]) => this.students = students,
)
我希望这个解释能消除你对这两个问题的疑虑。
谢谢尽管niks的回答确实指出了正确的生命周期事件触发顺序,但Angular团队 但是为了回答你的问题,
ionViewDidLoad()
和ngOnInit()
应该在相同的时间运行,所以它们本质上是相同的;但是,ionViewDidLoad()
:
如果页面离开但被缓存,则此事件将不会在上再次触发
随后的观看
因此,对于不希望缓存但希望在组件装入之前加载的任何内容,您应该使用
ionViewWillEnter()
,或者ionViewWillLoad()
处理GET请求之类的内容 构造函数
构造函数
不是角度特性,它由Javascript引擎调用。虽然是用TypeScript编写的,但它是ES6概念,是类生命周期钩子的一部分。因此,了解Angular何时完成其组件的初始化不是一个好地方
它是进行依赖注入的正确地方
ngOnInit
ngOnInit是一个有角度的钩子。在Angular完成组件设置后执行。例如,这意味着此时将完成属性绑定
这是初始化组件的一些数据的好地方
ionViewDidLoad
ionViewDidLoad
是一个离子导航生命周期事件。爱奥尼亚有一个页面的概念。它有一些与导航逻辑相关的类,它的基类是NavController。它们有导航堆栈的概念,因此页面基本上是从堆栈中推送或弹出的。在此导航过程中,会触发ionViewDidLoad等生命周期事件
加载页面后,将调用ionViewDidLoad。默认情况下,页面是缓存的,这意味着如果不销毁,将不会再次触发此事件
考虑到这是一个放置页面设置代码的好地方
参考文献:
最佳实践包括: 仅对依赖项注入使用
构造函数
使用ngOnInit
从静态数据或导航数据(通过NavParams)设置组件属性。模板可以使用由ngOnInit
设置的属性,即不需要使用Elvis运算符data?.prop
来检查空值。创建组件时仅调用一次
使用ionViewDidLoad
仅设置一次属性,类似于ngOniInit
。页面在创建时仅触发此事件一次。从缓存加载的页面(例如,在弹出顶部页面后加载页面)不会触发此事件。可以使用它来设置模式页面的属性,因为模式页面位于堆栈的顶部,并且没有缓存
每次输入页面时,使用ionViewWillEnter
设置数据。与ngOninit
和ionViewDidLoad
不同,它甚至可以从缓存页面触发
对于
ionViewDidLoad
和ionViewWillEnter
事件,呈现页面模板时不会初始化组件属性。在访问对象的成员之前,应该使用Elvis运算符检查对象的空值。我不知道ionViewDidLoad
,但ionViewDidLoad是一种离子方法,类似于angular2中的ngOnInit()。要了解更多信息,请准确查看。我猜这两个链接回答了你的问题。我也很想知道两者的区别,因为它们都在Ionic2应用程序中工作。我们不应该出于某种原因使用ngOnInit吗?@GabeO'Leary你可以使用任何你想要的,但是要保持一致。我建议您使用ionViewDidLoad()
和ionViewWillUnload()
代替angular的ngOnInit()
和ngOnDestroy()
。如果ionic中的生命周期事件不适合您的用例,请务必使用角度事件。
export class HomePage implements OnInit {
...
....
constructor(....){}
ngOnInit(){
this._studentService.getAllStudents().subscribe(
(students: Students[]) => this.students = students,
)