Наблюдаемый как ввод для Директивы - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть директива, которую я хочу добавить @Input, наблюдаемый для обработки сценариев успеха и неудачи http, наблюдаемых через эту директиву

Directive({
        selector: '[search]'
    })

    export class SearchDirective implements OnInit, OnChanges, OnDestroy {
    @Input() searchObs = new Subject();

ngOnInit() {
this.sub = this.searchObs.subscribe(
    data => console.log(data),
    err => console.log(err._body),
    () => console.log('directive completed')
);
}

ngOnDestroy() {
this.sub.unsubscribe();
}

ngOnChanges(changes: SimpleChanges): void {
    // tslint:disable-next-line:forin
    for (let propName in changes) {
        let change = changes[propName];
        if (propName === 'searchObs') {
            this.searchObs = (change.currentValue as Subject<any>);
                this.sub = this.searchObs.subscribe(
                    data => console.log(data),
                    err => console.log(err._body),
                    () => console.log('directive change  completed')
                );
        }
      }
  }
}

, и мой компонент api наблюдаемый равен

  searchObs = new Subject();
this.apiservice.getData(args).subscribe((data) => {
      this.searchObs.next(data);
    }, err => {
      this.searchObs.error(err);
    });
  }

что происходит сейчас, когда я получил первое значение подписки, будь то успех или ошибка в директиве, а затем никакие данные не привязаны к директиве.

1 Ответ

0 голосов
/ 23 декабря 2018

Основная проблема заключалась в том, что Subject обработка ошибок закрывает Subject на Subject.error(), поэтому я снова корректирую его после ошибки

Component.ts

this.apiservice.getData(args).subscribe((data) => {
      this.searchObs.next(data);
    }, err => {
      this.searchObs.error(err);
       this.searchObs = new Subject();
    });
  }
...