Tive o mesmo problema, estou usando uma combinação AfterViewChecked
e @ViewChild
(Angular2 beta.3).
O componente:
import {..., AfterViewChecked, ElementRef, ViewChild, OnInit} from 'angular2/core'
@Component({
...
})
export class ChannelComponent implements OnInit, AfterViewChecked {
@ViewChild('scrollMe') private myScrollContainer: ElementRef;
ngOnInit() {
this.scrollToBottom();
}
ngAfterViewChecked() {
this.scrollToBottom();
}
scrollToBottom(): void {
try {
this.myScrollContainer.nativeElement.scrollTop = this.myScrollContainer.nativeElement.scrollHeight;
} catch(err) { }
}
}
O modelo:
<div #scrollMe style="overflow: scroll; height: xyz;">
<div class="..."
*ngFor="..."
...>
</div>
</div>
Claro que isso é muito básico. O AfterViewChecked
acionador sempre que a visualização é verificada:
Implemente esta interface para ser notificado após cada verificação da visualização do seu componente.
Se você tiver um campo de entrada para enviar mensagens, por exemplo, este evento é disparado após cada tecla (apenas para dar um exemplo). Mas se você salvar se o usuário rolou manualmente e, em seguida, pular o, scrollToBottom()
você ficará bem.