多くのアイテムが含まれているリストがあり、各アイテムを選択できます。これには、Angular Material Virtual Scrollを使用します。アイテムを選択すると、選択したアイテムが強調表示され、サーバーに保存されます。ページを更新すると、選択したアイテムはサーバーから取得されますそして再び強調表示されます。
私のコードは次のようになります
<cdk-virtual-scroll-viewport itemSize="40" class="wrapper">
<div *cdkVirtualFor="let item of list"
[class.selected]="item.id === selectedItem.id">
</div>
</cdk-virtual-scroll-viewport>
問題は、リストで下にある項目を選択すると強調表示されるが、それを表示するにはリストまでスクロールする必要があるということです。その項目がサーバーからのものである場合、プログラムでその項目までスクロールしたいと思います。
私は docsscrollToIndex
メソッドがあります。 FixedSizeVirtualScrollStrategy
のインスタンスを見つけることができるので、このメソッドを呼び出すことができますか?
もちろん、CdkVirtualScrollViewport
インスタンスへの参照を取得する必要があります。
@ViewChild(CdkVirtualScrollViewport) viewPort: CdkVirtualScrollViewport;
scrollToMiddle(){
this.viewPort.scrollToIndex(list.length/2, "smooth");
}
例を見つけることができます このstackblitz内
リストで選択した要素のインデックスまでスクロールする必要がある場合は、次の操作を実行できます。
ngAfterViewInit(){
const selectedIndex = this.list.findIndex(elem => elem.id === this.selectedItem.id);
if(selectedIndex > -1){
this.viewPort.scrollToIndex(selectedIndex);
}
}
注:これは、リストがngAfterViewInit
ライフフック中にすでにロードされていることを前提としています。リスト値の設定方法に関する詳細情報を提供していないので、これが私が提供できる最高の方法です。