Я ищу решение для объявления значения директивы @Input в моем компоненте. Директива выглядит так:
import { Observable, Subject } from 'rxjs';
import { distinctUntilChanged, filter, shareReplay, startWith, takeUntil } from 'rxjs/operators';
import {
Directive,
DoCheck,
EmbeddedViewRef,
Input,
IterableChangeRecord,
IterableChanges,
IterableDiffer,
IterableDiffers,
NgIterable,
OnDestroy,
OnInit,
SkipSelf,
TemplateRef,
TrackByFunction,
ViewContainerRef,
} from '@angular/core';
import { ListRange } from '@app/shared/models';
import { CellData } from '../models/cell-data';
import { RowData } from '../models/row-data';
import { TableComponent } from '../table.component';
@Directive({
selector: '[appVirtualRow][appVirtualRowOf]',
})
export class VirtualRowOfDirective implements DoCheck, OnInit, OnDestroy {
dataChanges = new Subject<RowData[]>();
dataStream: Observable<RowData[]> = this.dataChanges.pipe(startWith([]), shareReplay(1));
@Input()
get appVirtualRowOf(): NgIterable<RowData> {
return this.appVirtualRow;
}
set appVirtualRowOf(value: NgIterable<RowData>) {
const data = Array.from(value || []);
this.appVirtualRow = value;
this.dataChanges.next(data);
}
@Input()
get appVirtualRowTrackBy(): TrackByFunction<RowData & { $$id: string }> {
return this.appVirtualRowTrackByFn;
}
set appVirtualRowTrackBy(fn: TrackByFunction<RowData & { $$id: string }> | undefined) {
this.virtualForOfDirty = true;
this.appVirtualRowTrackByFn = (index, item) => fn(index + (this.renderedRange ? this.renderedRange.start : 0), item);
}
@Input() appVirtualRowTemplateCacheSize = 20;
[...]
, и мне нужно установить значение appVirtualRowTemplateCacheSize
здесь:
<tr
appTableBodyRow
[row]="row"
[ngClass]="row.className"
*appVirtualRow="let row of data"
></tr>
</ng-template>
Я пробовал решения из этой статьи https://www.thetopsites.net/article/50036831.shtml но у меня они не работают. Это другой способ установки значения для appVirtualRowTemplateCacheSize
@Input?