2016-11-16 17 views
12

構造函數,ionViewDidLoad和ngOnInit方法之間有什麼區別。 在每種情況下適合採取什麼行動。Angular 2和Ionic 2:構造函數,ionViewDidLoad和ngOnInit方法之間有什麼區別

+1

我不知道'ionViewDidLoad',但其他人都在http://stackoverflow.com/解釋questions/35845554/angular-2-component-constructor-vs-oninit –

+1

ionViewDidLoad是一個離子m這與angular2中的ngOnInit()類似。要詳細瞭解它,請檢查http://ionicframework.com/docs/v2/api/navigation/NavController/ – AishApp

+1

http://ionicframework.com/docs/v2/api/navigation/NavController/#lifecycle-events 。猜你的問題是通過這2個鏈接 – Ivaro18

回答

1

關於ionic2 constructor:簡單地說,我們用它來創建插件,服務等的實例,例如:您有一個頁面(視圖),您想在其中顯示所有學生的列表,而您有一個包含所有學生的json文件(這個文件是你的數據文件),你需要做的是在這個服務中創建一個服務,你將創建一個方法並且獲得json數據的一個http.get請求,所以在這裏你需要什麼? 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)  
     } 
    } 

通知構造現在再次,如果我們想使用此服務的方法,我們會去我們的觀點/頁和:

import {StudentService} from './student.service'; 
import { SocialSharing } from '@ionic-native/social-sharing'; 
export class HomePage implements OnInit { 

    constructor(public _studentService: StudentService, public socialSharing: SocialSharing) { 
    } 

再次注意到這裏的構造,我們在構造函數中創建StudentService的一個實例,還有一件事,我們使用socialSharing插件,以便使用我們在構造函數中創建實例。

OnInit:在ionic2中這真的很神奇,或者我們可以在AngularJs2中說。與上面的例子相同,我們可以看到ngOnInit是什麼。 因此,您已準備好使用服務方法,現在在您的視圖/頁面中,您希望在您的視圖出現時可以使用學生列表數據,這應該是第一個在加載時自動發生的操作,因爲當視圖加載學生名單應該是可見的。所以班級執行OnInit並且你定義了ngOnInit。例如:

export class HomePage implements OnInit { 
... 
.... 
constructor(....){} 

ngOnInit(){ 
    this._studentService.getAllStudents().subscribe(
    (students: Students[]) => this.students = students, 
    ) 

我希望這個解釋清楚你對這兩者的懷疑。 謝謝

2

雖然niks的回答確實指出了正確的生命週期事件觸發順序,但是Angular團隊recommends against fetching data inside constructors

但要回答你的問題,ionViewDidLoad()ngOnInit()應該在同一時間運行,所以它們本質上是相同的東西;不過,ionViewDidLoad()checks for caching

如果一個頁面的葉子,但被緩存,那麼這個事件將不會再次 隨後觀看射擊。

就這樣,任何你不想緩存,但要加載上/前的組件被安裝,你應該使用ionViewWillEnter(),或ionViewWillLoad()像GET請求的東西。 ionViewWillLoad() has yet to be documented

0

構造

一個constructor不是一個角度的功能,它是由JavaScript引擎調用。那麼,用TypeScript編寫,但它是ES6的概念,它是類生命週期鉤子的一部分。因此,當Angular完成初始化組件時,它不是一個好地方。

這是做任何依賴注入的正確位置。

ngOnInit

ngOnInit的爲角週期鉤。它在Angular完成組件設置時執行。這意味着此時完成屬性綁定。

這是一個初始化組件數據的好地方。

ionViewDidLoad

ionViewDidLoad是離子導航生命週期事件。 Ionic有頁面的概念。它有一些與導航邏輯有關的類,它的基類是NavController。他們有導航堆棧的概念,所以頁面基本上是從堆棧中推出或彈出。在此導航生命週期事件過程中,例如ionViewDidLoad被啓動。

ionViewDidLoad在頁面加載完成後調用。頁面默認緩存,這意味着如果沒有銷燬,這個事件將不會再次啓動。

考慮到這是一個放置頁面設置代碼的好地方。

參考文獻:

Ionic NavControler

Angular Lifecycle Hooks

ES6 Classes

相關問題