gpt4 book ai didi

angular - 是否有 Angular2 View 更新生命周期 Hook ?

转载 作者:行者123 更新时间:2023-12-02 21:01:30 25 4
gpt4 key购买 nike

我有一个子组件,从其父组件接收数据并在 div 中显示文本。 parent 有可能发送 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 时,属性语言实际上已经改变,但是 View 绑定(bind)到 this.shownLanguage并且在 this.language 时实际上并没有更新在 ngOnChange 函数中分配给它。绑定(bind)到 this.language 也是如此本身。 OnChange 事件被击中得太早。由于 div 中缺少文本,我没有收到正确的高度,因此我的计算运行不正确。是否真的有一个事件在 View 更改时触发,或者是否有一种方法可以强制重绘 View ,以便我实际上可以获得具有正确高度的 div?

最佳答案

当然,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 - 实现此接口(interface)以在每次检查组件 View 后收到通知。

关于angular - 是否有 Angular2 View 更新生命周期 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com