angular - 滚动到底部;scrollTop = scrollHeight 运行太早?
问题描述
实时示例:https ://angular-txvcna.stackblitz.io/ (代码)。
我有一个“聊天”组件,我想让 div 每次添加消息时滚动到底部。
我通过将项目推送到数组 ( this.messages.push(message)
) 来添加新消息,然后尝试滚动到右下方。滚动操作似乎this.chatboxBody.nativeElement.scrollTop = this.chatboxBody.nativeElement.scrollHeight;
在 angular 的生命周期钩子之前,因为scrollHeight
它执行时具有较旧的高度值。
目前我setTimeout
用来修复它,但它真的感觉像一个捷径。我该如何解决?(理想情况下 - 以某种方式订阅更新子组件的钩子)
解决方案
我有几个想法:
- 您可以将消息输入更改为设置器,以便在输入消息时设置消息的私有版本并处理组件内的滚动。(在我个人看来,这是最好的解决方案,因为在使用该组件的每个地方都不必重复如何滚动到底部的逻辑)
private _message: VivrMessage;
@Input()
set message(val: VivrMessage){
if (val){
this._message = val;
this.handleScrolling();
}
}
- 您可以执行与上述类似的操作,但不是处理消息组件中的滚动,而是有一个输出,然后让父组件完成工作。
推荐阅读
- oracle - 在 Oracle 中在另一个视图上创建物化视图而不会过时/需要编译状态
- netsuite - Suitescript 2.0 获取子列表上的按钮
- r - R:改变稀疏矩阵的对角线非常慢
- bots - 如何使用 ID 添加对特定消息的反应?(discord.py)
- javascript - 将 API 中的 JSON 数据保存到数据库中并缓存请求,因此我不需要再次从 API 请求 - Node.js / Express.js
- c# - 我有 ac# 一个控制台应用程序,我需要将其转换为 Azure 函数
- python - 在 Pyspark 上运行 K-Means
- scala - 如何将尾递归方法转换为更类似于 Scala 的函数?
- r - Data.Table 列的非零值
- ruby-on-rails - 来自对 Rails 主动存储 API 做出反应的“未经许可的参数”