Angular 2 应用程序中 NgOnInit 生命周期钩子中移动方法的问题

Posted

技术标签:

【中文标题】Angular 2 应用程序中 NgOnInit 生命周期钩子中移动方法的问题【英文标题】:Problems Moving Method within NgOnInit Life Cycle Hook in Angular 2 App 【发布时间】:2017-07-10 01:49:31 【问题描述】:

我有一些数据正在填充到我的 Angular 2 应用程序中,并且一切都按预期工作,除了有时页面组件在信息准备好显示之前加载。在这些情况下,我可以点击“刷新”并填充数据。然而,这当然不是期望的行为。所以我的想法是将负责调用此信息的函数移动到 ngOnInit 生命周期钩子中。但是,当我尝试这样做时,我的 IDE 显示错误,我不确定为什么。

这是我当前组件的相关信息的样子:

export class DoctorGeneralComponent extends EventHandler implements OnInit 

    @Input('doctor')
    public doctor: DoctorModel;

    constructor(private dialog: MdDialog) 
        super();
    

    ngOnInit() 

     

    public getPropertyStatus(name: string): string 
        return this.doctor ? this.doctor.getPropertyStatus(name) : '';
    

如果我将这个“gePropertyStatus”方法移动到我的 ngOnInit 中,如下所示:

ngOnInit() 
   public getPropertyStatus(name: string): string 
    return this.doctor ? this.doctor.getPropertyStatus(name) : '';

...我收到一个 ts“预期的声明或声明”错误。

知道这里发生了什么,以及如何解决它以将此方法包含在我的 ngOnInit 生命周期挂钩中?

【问题讨论】:

您不需要将 getPropertyStatus 方法放在另一个方法中 在这种情况下,如果您对数据加载的时间有疑问,您可以这样做。这就是 ngOnInit 的全部意义所在——它的存在是为了确保在组件启动时正确执行某些方法。 【参考方案1】:

在 ngOnInit 内部调用,在外部定义:

ngOnInit() 
   this.getPropertyStatus("whatever name");


private getPropertyStatus(name: string): string 
  return this.doctor ? this.doctor.getPropertyStatus(name) : '';

【讨论】:

这行得通,谢谢。注意:我将其稍微更改为:ngOnInit() this.getPropertyStatus(name);

以上是关于Angular 2 应用程序中 NgOnInit 生命周期钩子中移动方法的问题的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 应用程序中 NgOnInit 生命周期钩子中移动方法的问题

Angular 2 App Component ngOnInit 在使用 iframe 时调用了两次

Angular2 - 在组件中测试 ngOninit

在 Angular 5 中禁用 zone.js 后,ngOnInit 未触发

所有页面通用的 Angular ngOnInit

为啥我应该在构造函数而不是 ngOnInit 中创建我的 Angular2 响应式表单?