#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; ...)