У меня была такая же проблема, я использую AfterViewChecked
и @ViewChild
комбинированную (Angular2 beta.3).
Компонент:
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) { }
}
}
Шаблон:
<div #scrollMe style="overflow: scroll; height: xyz;">
<div class="..."
*ngFor="..."
...>
</div>
</div>
Конечно, это довольно просто. AfterViewChecked
Срабатывает каждый раз , когда проверялся вид:
Реализуйте этот интерфейс, чтобы получать уведомления после каждой проверки представления вашего компонента.
Если у вас есть поле ввода для отправки сообщений, например, это событие запускается после каждого нажатия клавиши (просто для примера). Но если вы сохраните, прокручивает ли пользователь вручную, а затем пропустите, scrollToBottom()
все будет в порядке.