Не получать данные от Subject.next () - PullRequest
0 голосов
/ 08 октября 2018

У меня есть угловое приложение, использующее ngx-formly (динамические формы) с типом формы (выберите), в котором у меня есть subscribe().В компоненте форма formly определяется с помощью Observable для типа formly и создается динамически.

В компоненте у меня есть Subject и кнопки, создающие next(), тип formly неполучить данные (также не получил полный).A subscribe() в самом компоненте работает.

Изменение с Subject на BehaviorSubject<number>() Я получаю одноразовые данные в форме, но больше никаких данных о next().

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

Пример 100% работающего стекаблица можно найти здесь: https://stackblitz.com/edit/angular-9ts63k?file=src%2Fapp%2Fapp.component.ts

Я хорошо понимаю rxjs (использую rxjs и ngx-store в течение двух лет; я, безусловно, эксперт), но с этим я полностью застрял, поэтому любые идеи, почему rxjs с такой же настройкой, как и впример стекаблица в моем приложении не работает.

  • "@ angular / core": "^ 6.1.9"
  • "rxjs": "^ 6.3.3"
  • no rxjs-compat

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Я нашел виновника.Приложение использует динамические формы и использует cloneDeep в сервисе для копирования определения полей формы (которое было упущено).До сих пор приложение использовало только возврат Observable без использования Subject, который работал.Теперь использование дополнительных объектов Subject больше не работает, проверка потока Observable показала, что он закрыт.

0 голосов
/ 08 октября 2018

Кажется, что архитектура, которую вы пытаетесь использовать, очень похожа на архитектуру ngrx/effects (найдите здесь Github) .Итак, теперь проблема с вашим кодом заключается в том, что вы подписываетесь на тему stepSelected$, вместо этого вы просто обматываете ее и применяете к ней оператор switchMap.Вы не можете получить значение от наблюдаемого, пока не подпишете его.

this.stepSelected$.subscribe(value => {
  this.getSports(value);
});

Вам нужно будет сделать что-то подобное, чтобы получить значение от предмета, а затем вызвать API.

...