У меня проблемы с получением наблюдаемой, вложенной в случай коммутатора для разрешения. Непосредственно внутри ngSwitch до случаев я могу получить значение для наблюдаемого. Однако, как только я нахожусь в переключателе, мое значение всегда возвращает ноль.
Я пробовал несколько разных вещей, чтобы решить эту проблему без прогресса. Возможно, я неправильно понимаю, как работает асинхронный канал в угловых шаблонах?
<!--template-->
<ng-container [ngSwitch]="(selectedFilterConfig$ | async)?.filterType">
<p>{{(selectedFilterValueMap$ | async | json)}}</p> <!--This resolves.-->
<div *ngSwitchCase="'select'">
<p>List these...</p>
<p>{{(selectedFilterValueMap$ | async | json)}}</p> <!--This always comes back null.-->
<p *ngFor="let item of (selectedFilterValueMap$ | async)"> <!--So does this...-->
{{item.display}}</p>
</div>
<div *ngSwitchDefault>
<p>Not a select!</p>
</div>
</ng-container>
/* Imports */
interface FilterColumnSelectItem {
value: string;
display: string;
}
export interface FilterSelection {
filter: string;
value: string;
}
@Component({
selector: 'app-add-new-filters-dialog',
styleUrls: ['./add-new-filters-dialog.component.scss'],
templateUrl: './add-new-filters-dialog.component.html',
})
export class AddNewFiltersDialogComponent implements OnInit {
public newFilterForm = this.formBuilder.group({
filterSelection: [''],
filterValue: [''],
});
public filterSelectionFormValue$: Observable<string>;
public filterValueFormValue$: Observable<string>;
public tableColumnConfigs$: Observable<ColumnMeta[]>;
public filterSelectionFormControl: AbstractControl;
public filterValueFormControl: AbstractControl;
public selectedFilterConfig$: Observable<FilterConfig>;
public selectedFilterMeta$: Observable<ColumnMeta>;
public selectedFilterValueMap$: Observable<FilterColumnSelectItem[]>;
constructor(
public dialogRef: MatDialogRef<AddNewFiltersDialogComponent>,
private formBuilder: FormBuilder
) {}
public ngOnInit(): void {
this.filterSelectionFormControl = this.newFilterForm.get('filterSelection');
this.filterValueFormControl = this.newFilterForm.get('filterValue');
this.filterSelectionFormValue$ = this.filterSelectionFormControl.valueChanges.pipe(val => val);
this.filterValueFormValue$ = this.filterValueFormControl.valueChanges.pipe(val => val);
this.selectedFilterMeta$ = combineLatest(this.tableColumnConfigs$, this.filterSelectionFormValue$).pipe(
map(([metas, filterSelection]) =>
metas.find(meta => meta.columnName === filterSelection)));
this.selectedFilterConfig$ = this.selectedFilterMeta$.pipe(
map(meta => meta != null ? meta.filterConfig : null));
this.selectedFilterValueMap$ = this.selectedFilterConfig$.pipe(
map(config => !!config.filterSelectOptions ? config.filterSelectOptions : null))
.pipe(map(selectionItems => {
if (!selectionItems) {
return null;
}
return orderBy(selectionItems, 'priority')
.map(selectionItem => ({value: selectionItem.value, display: selectionItem.display}));
}));
}
/* Rest of component */
}
Я хочу иметь возможность получить результаты для selectedFilterValueMap$
после того, как случай переключения пройден.