Изменение ngForOf для получения итерации из предмета поведения - PullRequest
0 голосов
/ 30 мая 2018

для моего приложения Я хочу иметь директиву, такую ​​как ngForOf (https://github.com/angular/angular/blob/master/packages/common/src/directives/ng_for_of.ts), но вместо того, чтобы получать итеративный объект из Input (), я хочу получить от объекта поведения в директиве Class.

Использование темы поведения в классе хоста, например:

BehaviourSubject.subscribe((value) => {this.items = value})

<comp ngFor="let item of item"></comp>

, не вариант. Вместо этого я хочу запустить подписку в директиве.

Я хочу использовать директиву, напримерэто:

 <comp *ngFor></comp>

Есть идеи, как сделать эту работу? (Отличия от ngForCode)

1 Ответ

0 голосов
/ 30 мая 2018

Не проверено, но чтобы дать вам представление:

@Directive({
  selector: '[forBs]'
})
export class ForBs<T> extends NgForOf<T> {

  @Input()
  forBs: BehaviorSubject<NgIterable<T>> = new BehaviorSubject([]);

  get ngForOf(): NgIterable<T> {
    return this.forBs.getValue();
  }

  constructor(_viewContainer: ViewContainerRef, _template: TemplateRef<NgForOfContext<T>>, _differs: IterableDiffers) {
    super(_viewContainer, _template, _differs);
  }
}

Вероятно, у него не будет поддержки шаблона и trackBy ... и, возможно, некоторые другие проблемы с хуками onChanges и doCheck.Но опять же, это поможет вам встать на правильный путь.

Использование будет выглядеть так:

<comp *forBs="item$"></comp>

Где

item$ = new BehaviourSubject([]);

Но опять же, вытакже можно просто использовать async трубу;)

<comp *ngFor="let item of item$ | async"></comp>
...