構造函數,ionViewDidLoad和ngOnInit方法之間有什麼區別。 在每種情況下適合採取什麼行動。Angular 2和Ionic 2:構造函數,ionViewDidLoad和ngOnInit方法之間有什麼區別
回答
關於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,
)
我希望這個解釋清楚你對這兩者的懷疑。 謝謝
雖然niks的回答確實指出了正確的生命週期事件觸發順序,但是Angular團隊recommends against fetching data inside constructors。
但要回答你的問題,ionViewDidLoad()
和ngOnInit()
應該在同一時間運行,所以它們本質上是相同的東西;不過,ionViewDidLoad()
checks for caching:
如果一個頁面的葉子,但被緩存,那麼這個事件將不會再次 隨後觀看射擊。
就這樣,任何你不想緩存,但要加載上/前的組件被安裝,你應該使用ionViewWillEnter()
,或ionViewWillLoad()
像GET請求的東西。 ionViewWillLoad() has yet to be documented。
構造
一個constructor
不是一個角度的功能,它是由JavaScript引擎調用。那麼,用TypeScript編寫,但它是ES6的概念,它是類生命週期鉤子的一部分。因此,當Angular完成初始化組件時,它不是一個好地方。
這是做任何依賴注入的正確位置。
ngOnInit
ngOnInit
的爲角週期鉤。它在Angular完成組件設置時執行。這意味着此時完成屬性綁定。
這是一個初始化組件數據的好地方。
ionViewDidLoad
的ionViewDidLoad
是離子導航生命週期事件。 Ionic有頁面的概念。它有一些與導航邏輯有關的類,它的基類是NavController。他們有導航堆棧的概念,所以頁面基本上是從堆棧中推出或彈出。在此導航生命週期事件過程中,例如ionViewDidLoad被啓動。
ionViewDidLoad在頁面加載完成後調用。頁面默認緩存,這意味着如果沒有銷燬,這個事件將不會再次啓動。
考慮到這是一個放置頁面設置代碼的好地方。
參考文獻:
- 1. ionic-native和@ ionic-native/xxx之間的區別是什麼2
- 2. 在Angular 2組件定義中使用ngOnInit和構造函數有什麼實際區別?
- 3. Android構造函數和onCreate()之間有什麼區別?
- 4. Angular 2 TS和Angular 2 Dart有什麼區別?
- 5. Ionic 2 - ionViewDidLoad函數不能讀取navCtrl
- 6. $ a == 2和2 == $ a之間有什麼區別?
- 7. 構造函數和方法之間的區別
- 8. Angular 1.X和2.X之間的區別是什麼
- 9. 通過Angular 2/Ionic 2中的構造函數刷新數據
- 10. JavaScript中的函數和構造函數之間有什麼區別?
- 11. 3/2和-3/2有什麼區別?
- 12. Angular 2構造函數ngOnInit未定義的屬性TypeScript
- 13. 函數構造函數和原型構造函數有什麼區別?
- 14. 在構造函數和方法中調用thread.start()方法有什麼區別
- 15. ngOnInit和Angular2的ngAfterViewInit有什麼區別?
- 16. C#中myArray.GetValue(2)和myArray [2]之間的區別是什麼?
- 17. (int *)arr [2]和int * arr [2]之間的區別是什麼?
- 18. 空的構造函數和沒有構造函數有什麼區別
- 19. setter方法和構造方法有什麼區別?
- 20. 析構函數和函數之間的區別是什麼?
- 21. 原型對象和構造函數上的成員之間有什麼區別?
- 22. 數據/類型構造函數和函數之間的區別?
- 23. Angular 2 hooks ngOnInit
- 24. 帶有Ionic 2 Angular 2和TypeScript的OpenPGP
- 25. 靜態構造函數和私有構造函數之間的主要區別是什麼?
- 26. Object,Object和[1:Object,2:Object]之間有什麼區別?
- 27. Magento :: soap API版本1和2之間有什麼區別?
- 28. Silverlight 2和Silverlight 3之間有什麼區別?
- 29. 相機和相機2之間有什麼區別API
- 30. JavaFX-2:場景和窗格之間有什麼區別
我不知道'ionViewDidLoad',但其他人都在http://stackoverflow.com/解釋questions/35845554/angular-2-component-constructor-vs-oninit –
ionViewDidLoad是一個離子m這與angular2中的ngOnInit()類似。要詳細瞭解它,請檢查http://ionicframework.com/docs/v2/api/navigation/NavController/ – AishApp
http://ionicframework.com/docs/v2/api/navigation/NavController/#lifecycle-events 。猜你的問題是通過這2個鏈接 – Ivaro18