Angular 2中的生命周期钩子

时间:2017-06-12 11:10:30

标签: javascript angular

我在我的应用程序中使用Wijmo网格。但是网格最初在屏幕上显示不正确。 第一列是一个复选框,该方法调用this.flex.refresh,它实际刷新并可能重新呈现网格。

因此,最初加载页面时,只显示一个带复选框的单元格。单击它时,将显示完整的网格。 如果我从调用中删除了flex刷新方法,那么它会显示所有内容。

我的假设是在渲染实际网格之前未加载网格的CSS。 (虽然我应该在我的angular-CLI JSON中使用它。)

所以,我想要做的是在页面完全加载时刷新,但我找不到可靠的钩子。

一旦完成所有内容,Flex变量就会被赋值。(它在构造函数或ngInit中未定义)。

所以,我试图找到一个可靠的钩子,它会出现。

我尝试过ngAfterViewInit,ngAfterContentInit,但那里未定义。

如果我这样做

ngAfterViewInit() {
    setTimeout(() => {
        this.flex.refresh();
    }, 500);
  }

然后它有时会起作用,有时却不起作用。在setTimeout中,我可以在大多数时间找到flex变量,有时不会。所以这似乎有点不可靠。 我想知道是否有一个钩子我可以调用该方法。在页面完全初始化后调用的挂钩。 AfterViewInit&在初始化开始但未完成之后,似乎调用了afterContentInit。

2 个答案:

答案 0 :(得分:0)

您可以在ngAfterViewChecked()中拨打相同的电话。正如文档所述,在以下情况下调用它:

Respond after Angular checks the component's views and child views.

Called after the ngAfterViewInit and every subsequent ngAfterContentChecked(). 

答案 1 :(得分:0)

根据文档,最后一个钩子是ngAfterViewChecked。 但是你需要仔细看看这个:

  

如果挂钩立即更新组件的数据绑定注释属性,则Angular会抛出错误(试试吧!)。 LoggerService.tick_then()推迟了浏览器JavaScript周期的一个回合的日志更新,这已经足够长了。

wait a tick