2016-11-12 123 views
3

我有一個Ionic 2應用程序,它工作得很好。我將離子應用從rc-0更新爲rc-2。從那時起,我面臨離子生命週期事件ionViewDidLoad的一個問題。我有一個註冊表單。離子生命週期沒有開火

import {Validators, FormBuilder, FormGroup , AbstractControl } from '@angular/forms'; 
export class Signup { 
    form: FormGroup; 
    constructor( formBuilder: FormBuilder) { } 
    ionViewDidLoad() { 
    this.form = this.formBuilder.group({ 
     name: ['', Validators.required], 
     email: ['', CustomValidator.emailValidator], 
     password: ['', Validators.compose([Validators.minLength(8),Validators.required])], 
     password_confirmation: ['', Validators.compose([Validators.minLength(8),Validators.required])] 
    } } 
} 

而在我的html頁面我有,

<form [formGroup]="form" (ngSubmit)="signup()"> 

但當頁面加載,我在Web的控制檯得到一個異常

EXCEPTION: Error in ./Signup class Signup - inline template:9:8 caused by: formGroup expects a FormGroup instance. Please pass one in. 

我相信form變量在加載html之前未定義。我試過ngOnInit,它工作正常。 ionViewDidLoad在更新Ionic之前正在工作,並且大多數示例僅在線提及上述方法。現在發生了什麼,改變了什麼?

+0

試着在你的構造函數初始化的形式。那是我正在初始化它的地方。 – JoeriShoeby

+0

我可以使用ngOnInit來使用它。但不知道爲什麼ionViewDidLoad沒有工作。儘量避免在構造函數中添加東西,儘管它在這裏並不重要。 – raj

+0

您是否嘗試過我的建議?問題似乎是您的視圖在您的表單創建之前得到呈現。 – JoeriShoeby

回答

1

RC2已出現突破性變化。根據新的變化,

ionViewDidLoad,意味着一切都已經加載!包括兒童在內的 。所以如果你模板使用的項目,它未定義。

我們可以使用新的ionViewWillLoad

ionViewWillLoad() { 
    this.form = this.formBuilder.group(); 
} 
+0

似乎你已經有你的答案了;) – JoeriShoeby

+0

在哪裏?這些文檔尚未更新。從這個問題得到它。 https://github.com/driftyco/ionic/issues/8449 – raj

0

錯誤告訴你到底發生了什麼問題。在編譯/渲染視圖時,Angular需要一個formGroup實例來存在。雖然在編譯/渲染視圖後調用ionViewDidLoad get,但ionViewDidLoad不會被調用,因爲模板中出現錯誤。爲了清楚起見:

在構造函數或ngOnInit中定義表單,否則模板將無法訪問formGroup實例,因爲它尚未創建。

+0

https://ionicframework.com/docs/v2/resources/forms/ – raj