是否有Angular2视图更新的生命周期挂钩?

是否有Angular2视图更新的生命周期挂钩?,angular,angular2-template,angular2-components,Angular,Angular2 Template,Angular2 Components,我有一个子组件,从父组件接收数据并在div中显示文本。父组件可能会将未定义的作为数据发送。当它这样做时,div应该将其高度转换为0,这是我通过css转换完成的。由于我不知道文本的长度,div的高度应该转换为auto。我发现了一个这样做的代码示例,我已经将其转换为适合我的组件 export class LanguageDetail implements OnChange, OnInit { @Input() language: Language @ViewChild("detail

我有一个子组件,从父组件接收数据并在div中显示文本。父组件可能会将
未定义的
作为数据发送。当它这样做时,div应该将其高度转换为0,这是我通过css转换完成的。由于我不知道文本的长度,div的高度应该转换为
auto
。我发现了一个这样做的代码示例,我已经将其转换为适合我的组件

export class LanguageDetail implements OnChange, OnInit {
    @Input() language: Language
    @ViewChild("detailPanel") detailPanel: ElementRef;

    private shownLanguage: Language;

    ngOnInit() {
        this.shownLanguage = new Language();
    }

    ngOnChange() {
        if (this.detailPanel) {
            var detailPanel: JQuery = $(this.detailPanel.nativeElement);

            if (this.language) {
                ...
                // calculate the end height and apply a transition with fixed values to this.shownLanguage
                this.shownLanguage = this.language;

                oldHeight = detailPanel.height();
                detailPanel.height("auto");
                newHeight = detailPanel.height();
                detailPanel.height(oldHeight);
                ...
            } else {
                ...
                // do a transition to 0 for this.shownLanguage
                ...
            }
        }
    }
}
现在的问题是,当调用ngOnChange时,属性语言实际上已经更改,但是视图绑定到
this.shownLanguage
,并且在ngOnChange函数中为其指定
this.language
时,实际上不会更新。对
this.language
本身的绑定也是如此。OnChange事件过早命中。
由于div中缺少文本,我没有收到正确的高度,因此我的计算结果不正确。视图更改时是否确实会触发事件,或者是否有方法强制重新绘制视图,以便实际获取具有正确高度的div?

当然,查看检查后的

  [LifecycleHooks.OnInit, OnInit],
  [LifecycleHooks.OnDestroy, OnDestroy],
  [LifecycleHooks.DoCheck, DoCheck],
  [LifecycleHooks.OnChanges, OnChanges],
  [LifecycleHooks.AfterContentInit, AfterContentInit],
  [LifecycleHooks.AfterContentChecked, AfterContentChecked],
  [LifecycleHooks.AfterViewInit, AfterViewInit],
  [LifecycleHooks.AfterViewChecked, AfterViewChecked],

AfterViewChecked
-实现此接口,以便在每次检查组件视图后收到通知。

我尝试了AfterViewChecked,并且在我的值更改时多次调用它。在我看来,每个组件都会调用它,而不仅仅是LanguageDetail组件的部分视图,它实际上实现了AfterViewChecked。有趣的是,现在它工作了,AfterViewChecked只会被调用两次,这是应该的。好的,谢谢。