Угловая связь между компонентами данных не сохраняется - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь установить связь между моими двумя компонентами.В первом компоненте у меня есть список с элементами, и я хочу отправить один из этих элементов на мой второй компонент, чтобы отредактировать их.В первом компоненте я устанавливаю данные в своем сервисе, а во втором компоненте я хочу прочитать эти данные из сервиса, данные поступают, но когда я устанавливаю эти данные в свой массив после выхода из метода ngOnInit, мой массив очищается.

ЭтоМой onClick для кнопки редактирования в первом компоненте

editPurchasesInvoice(i : number) {
this.purchasesService.editPurchasesInvoice(this.purchasesInvoices[i].gpInvoiceitemsByGpInvoiceRecid);
this.router.navigate(['new'], {relativeTo: this.route});
}

Методы обслуживания

subject = new Subject<any>();

editPurchasesInvoice(invoiceItems: GpInvoiceitem[]) {
    this.subject.next({invoice: invoiceItems});
  }

  getEditedInvoice(): Observable<any> {
    return this.subject.asObservable();
  }

это мой компонент scond

ngOnInit() {
    this.subscription = this.purchaseService.getEditedInvoice().subscribe( data => {
      this.invoiceItems.push(data.invoice);
    });
  }

После выхода данные метода ngOnInit теряются.

1 Ответ

1 голос
/ 16 июня 2019

Подписка на Subject будет получена только после передачи новых данных.BehaviourSubject выдаст последние отправленные данные в подписке.Вы также можете использовать ReplaySubject, что в основном то же самое, но где вы можете контролировать количество выбросов, и вам не нужно указывать начальное значение.

Как указано в комментариях, вы должны обновитьваш сервис, чтобы использовать любой из этих двух, учитывая ваши данные, я предлагаю ReplaySubject:

readonly subject = new ReplaySubject<any>(1)

editPurchasesInvoice(invoiceItems: GpInvoiceitem[]) {
  this.subject.next({invoice: invoiceItems});
}

getEditedInvoice(): Observable<any> {
  return this.subject.asObservable();
}
...