Angular2视图是否更新了生命周期钩子?

时间:2016-06-26 10:35:45

标签: angular angular2-template angular2-components

我有一个子组件,从父组件接收数据并在div中显示文本。父母可能会将undefined作为数据发送。当它这样做时,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时实际上没有更新。绑定到$ gem install --pre asciidoctor-pdf $ asciidoctor-pdf -v 本身也是如此。 OnChange事件过早发生。 由于div中缺少文本,我没有收到正确的高度,因此我的计算运行不正确。是否实际上有一个事件在视图发生变化时被触发,或者是否有办法强制重新绘制视图以便我可以实际获得具有正确高度的div?

1 个答案:

答案 0 :(得分:4)

当然,AfterViewChecked

怎么办?
  [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 - 实施此界面,以便在每次检查您的组件视图后收到通知。