私のアプリケーションは、(スクロールして)メッセージのリストを表示します。ユーザーが新しいメッセージを追加すると、そのページはメッセージリストの一番下までスクロールする必要があります。新しいメッセージがメッセージリストに追加された直後にscrollToBottom()を呼び出すのは正しいですか?それともタイミング問題を起こすでしょうか?ビューが既に更新されています(新しいメッセージを含む)ので、scrollHeightは正しいでしょうか?または私の質問を定式化する他の方法:モデルが変更されたときにビューが完全に更新されることを知る/確認する方法があります。ビューがAngular2で完全に更新されたときに呼び出す関数
ビュー(messaging.html):
<div class=”height: 100%; scroll: auto”>
<div class="message" *ngFor="#message of messages">
...
</div>
</div
コンポーネント:
import {Component, ViewChild, ElementRef} from 'angular2/core';
import {CORE_DIRECTIVES} from 'angular2/common';
@Component({
selector: 'messaging',
templateUrl: './messaging.html',
styleUrls: ['./messaging.css'],
directives: [CORE_DIRECTIVES]
})
export class Messaging {
private messages:Message[] = [];
@ViewChild('messagingscroll') private messageScroll: ElementRef;
constructor() {
}
sendMessage(message:string, element) {
let msg:Message = new Message(message);
// Add msg
this.messages.push(msg);
// Scroll to bottom
this.scrollToBottom();
// Set back empty
element.value = '';
}
scrollToBottom(): void {
this.messageScroll.nativeElement.scrollTop = this.messageScroll.nativeElement.scrollHeight;
}
}
ngAfterViewInitを(見るだけで、起動/初期化時に呼び出されます。私は新しいメッセージを追加した後ではありません。 しかし、あなたの答えでは、ngAfterViewCheckedが見つかりました。これはおそらく解決策だと思いますか? – user2276975
ええ、ここで確認できるライフサイクルはほとんどありません。https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html –