【问题标题】:Ionic life-cycle not firing离子生命周期未触发
【发布时间】:2016-11-12 04:32:16
【问题描述】:

我有一个运行良好的Ionic 2 应用程序。我将 ionic 应用程序从 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()">

但是当页面加载时,我的网络控制台出现异常

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

我相信在加载 html 之前没有定义 form 变量。我试过ngOnInit,效果很好。 ionViewDidLoad 在我更新 Ionic 之前一直在工作,并且大多数在线示例仅提及上述方法。现在发生了什么,发生了什么变化?

【问题讨论】:

  • 尝试在构造函数中初始化表单。那就是我正在初始化它的地方。
  • 我可以使用 ngOnInit 让它工作。但不确定为什么 ionViewDidLoad 不起作用。最好避免在构造函数中添加东西,即使在这里并不重要。
  • 你试过我的建议了吗?问题似乎是在创建表单之前呈现了您的视图。
  • 我没有尝试您的解决方案,但我相信它会起作用。正如我提到的ngOnInit 工作,所以问题是ionViewDidLoadhtml 加载后运行。不应该在那之前调用它吗?

标签: angularjs ionic-framework


【解决方案1】:

RC2 发生了重大变化。根据新的变化,

ionViewDidLoad,表示一切都已经加载完毕! 包括儿童。因此,如果您的模板使用项目并且它未定义。

我们可以使用新的ionViewWillLoad

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

【讨论】:

【解决方案2】:

该错误准确地告诉您出了什么问题。在编译/渲染视图时,Angular 需要一个 formGroup 实例已经存在。在编译/渲染视图后调用 ionViewDidLoad 时,不会调用 ionViewDidLoad,因为模板中出现错误。说清楚:

在构造函数或 ngOnInit 中定义您的表单,否则您的模板将无法访问 formGroup 实例,因为它尚未创建。

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2018-04-28
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多