Получить только новые значения - PullRequest
0 голосов
/ 14 марта 2019

В моем угловом приложении я использую библиотеку ngxs в качестве магазина.У меня есть метод, который получает last edited id:

return this.store.select((state: AppStateModel) => state.lastEditedId)
      .pipe(filter(id => id > 0));

Я использую его для изменения параметра в форме.Например:

this._options$ = merge(
      /**
       * Init value from query param
       */
      initValue$.pipe(tap(i => console.log('initValue$', i)), take(1)),
      /**
       * Last edited id
       * Here I want only newly emitted values, but I also get old one.
       */
      this.obiektySelectors.lastEditedId()
        .pipe(
          tap(i => console.log('lastEditedId', i)),
          distinctUntilChanged(),
        ),
);

Проблема в том, что когда у меня есть значение в lastEditedId, оно всегда попадает в поток this._options$.Я знаю, что это не было выпущено.Могу ли я заставить наблюдаемое принимать только излучаемые значения?

1 Ответ

1 голос
/ 15 марта 2019

Единственная идея, которая приходит мне в голову, - создать отдельную тему, которая подпишется на lastEditedId() и переиздать идентификаторы.

const idChanges = new Subject();
this.obiektySelectors.lastEditedId().subscribe(id => idChanges.next(id));

Тогда вы можете использовать эту тему в своем слиянии.Поскольку Subject не хранит последнее значение, оно будет выдавать только новые идентификаторы.

this._options$ = merge(
      /* ... */
      idChanges
        .pipe(
          tap(i => console.log('lastEditedId', i)),
          distinctUntilChanged(),
        ),
);

небольшое импровизированное демо здесь https://stackblitz.com/edit/rxjs-8vugyz

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