Я до сих пор не нашел способ начать рендеринг из сообщения, на которое щелкнули, но лучший обходной путь, который я нашел, был следующий.
Оказывается, используя this.viewPort.scrollToIndex(scrollIndex, "auto")
- обратите внимание на auto
параметр - на самом деле не прокручивает страницу, а практически телепортирует прямо в нужный индекс. Это означает, что если вы вызовете метод достаточно быстро, никакие другие элементы между началом страницы и индексом, на который вы попадаете, не будут загружены с сервера. Вы можете проверить этот эксперимент в этом StackBlitz , открыв вкладку «Сеть» в chrome инструментах разработчика.
Теперь попытаемся запустить указанную выше команду так, как она была задумана, например:
ngAfterViewInit() {
this.viewPort.scrollToIndex(i);
}
вы наверняка поймете, что это не работает. Было предложено два решения этой ошибки здесь . Оба они работают, но вызов setTimeout()
заметно медленнее, поскольку вы фактически видите «привязку» к новому индексу при загрузке страницы. Таким образом, лучший способ справиться с этим - запустить метод scrollToIndex()
в ловушке ngAfterViewChecked()
вместо ngAfterViewInit()
, например:
ngAfterViewChecked() {
this.viewPort.scrollToIndex(i);
}
Это не идеальное решение, но оно практически воспроизвести желаемый опыт для конечного пользователя.