необходимо отсортировать, отфильтровать и установить значение по умолчанию с помощью rxjs

#angular #angular-reactive-forms

#угловой #угловые-реактивные-формы

Вопрос:

У меня есть наблюдаемое в угловом приложении, которое связано с выпадающим контролем реактивных форм. Мне в основном нужно отфильтровать, отсортировать, а также показать значение по умолчанию. Я написал две реализации, в которых первая выполняет фильтрацию и сортировку, но не значение по умолчанию, в то время как последняя выполняет только значение по умолчанию. Я могу объединить их вместе и заставить это работать, но не уверен, что это лучший способ. Кто-нибудь может дать некоторое представление об этом, пожалуйста

 this.nameList$ = this.nameService.getNames()  .pipe(  map(response =gt; response  .filter(t =gt;  t.name !== '!',  )  .sort(this.sortByNameAscending),   ),  takeUntil(this.destroy$)  )    this.nameList$ = this.nameService.getNames()  .pipe(  tap((values: any) =gt; {  const found = values.find(x =gt; x.isDefault);  if (found) {  this.form.get('firstName').setValue(found.name);  }      })    ,  takeUntil(this.destroy$)  )  

Я пробовал это, что работает, но не уверен, что это лучший способ сделать это

 this.nameList$ = this.nameService.getTitles()  .pipe(  map(response =gt; response  .filter(t =gt;  t.name !== '!',  )  .sort(this.sortByNameAscending),   ),  takeUntil(this.destroy$)  )  .pipe(  tap((response: any) =gt; {  const found = response.find(x =gt; x.isDefault);  if (found) {  this.form.get('firstName').setValue(found.name);  }      })    ,  takeUntil(this.destroy$)  )  

Комментарии:

1. Я начал писать комментарий, когда вы обновили вопрос. Да, то, что у вас есть, правильно, но вам не нужна другая труба. Переместите кран со второй трубы на первую. Так что это будет выглядеть так: this.nameList$ = this.nameService.getTitles().pipe(map(...), tap(...), takeUntil(...))

Ответ №1:

Я бы предпочел это:

 this.nameList$ = this.nameService.getNames().pipe(share(), takeUntil(this.destroy$)) this.nameList$.subscribe(() =gt; ...) this.nameList$.subscribe(() =gt; ...)