angular - Angular 11基于另一个元素的渲染有条件地渲染元素
问题描述
我正在尝试创建一个自定义扩展面板(我不想使用 Angular Material 的版本),但是由于我的实现方式,我遇到了生命周期挂钩的问题。
此扩展面板以折叠状态开始。它接收一组对象并生成一行按钮(每个对象一个按钮,按钮的文本是从对象中的属性中提取的)。这些按钮的右侧是“显示全部”按钮。这就是事情变得复杂的地方。我想根据按钮是否已包裹到第二行(由于包含跨度的设置高度而最初隐藏)有条件地显示“全部显示”。如果某些按钮文本很长或者要生成的按钮列表很长,就会发生这种情况。这目前正在通过执行以下操作:
模板
<span #ButtonGroup>
<button *ngFor="let but of AllButtons">{{but.Title}}</button>
</span>
<span id="see-all">See All ({{AllButtons?.length}})</span>
打字稿
constructor(private _renderer:Renderer2) { }
ngOnViewChecked():void {
...
//By checking if the current height is greater than half the total height then we can be fairly certain that we only have 1 row
if(this.ButtonGroup.nativeElement.clientHeight > (0.5 * this.ButtonGroup.nativeElement.scrollHeight)) {
this._renderer.setAttribute(thing,"hidden","true");
}
}
我的主要问题是,这仅在第一次运行时才有效。如果用户更改了父对象(从而更改了应该生成的按钮),则 ngOnViewChecked 在 ngFor 呈现新的按钮集之前运行(尽管“显示全部”跨度确实具有正确呈现更新的长度)。由于我依靠 ButtonGroup 的 clientHeight/scrollHeight 有条件地显示“全部显示” - 在生命周期挂钩运行时没有完成此渲染会造成相当多的麻烦。
我是否使用了错误的生命周期挂钩?或者是否有更好的方法来解决这个问题,而不是依赖于渲染的大小?任何帮助将不胜感激。
解决方案
推荐阅读
- java - avd 打开主页但没有在 android studio 中显示我的应用
- r - 使用 ggplot2 从列表中绘制数据
- python-3.x - ValueError:在 LightGBM 中检测到圆形参考
- javascript - 无法使用全局或局部变量访问输入值
- ionic4 - 如何使用 CLI 生成 Stencil+Ionic4 PWA 组件
- java - RecyclerView - 获取选定的位置并将该位置传递给另一个活动,其中将显示相同的列表并选择该特定项目
- javascript - 在下拉列表中提交初始选择
- python - 为什么在尝试将文件分配给 Model.form 时出现属性错误??)
- python - 在这种情况下,可以将 itertools 用于未指定数量的维度吗?
- spring - 如何在 spring @Query 注释中放置带有变量的 n1ql 查询?