Angular структурная директива с несколькими входами, также повторяемая - PullRequest
0 голосов
/ 14 июля 2020

Я ищу решение для объявления значения директивы @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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...