2016-11-12 89 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