Я кодировал две наблюдаемые:
Один для отправки формы событий:
<form role="form" (ngSubmit)="search()">
...
</form>
А search()
достигается и выдает:
private search(): void {
this.searchClickSubject.next();
}
В конструкторе компонентов:
private searchClickSubject:Subject<void>;
private searchClick$:Observable<any>;
constructor() {
this.searchClickSubject = new Subject<void>();
this.searchClick$ = this.searchClickSubject.asObservable();
}
Как видите, я создаю Observable
из субъекта searchClickSubject
, используя метод searchClickSubject.asObservable
для searchClick$
.
С этого момента я использую это searchClick$
Наблюдаемое для того, чтобы поймать submit form
.
После этого я создаю еще одну Observable:
this.searchQuery$ = this.searchClick$.pipe(
map(() => <Query>{
offset: 0,
limit: 10
})
);
Итак, каждый раз, когда выдается Query
, я делаю запрос, используя пользовательские конвейерные функции:
this.metrics$ = this.searchQuery$
.pipe(
pageLoading(),
makeRequest(),
loadedPage()
);
Это мой ngOnInit()
:
public ngOnInit() {
// Grab search button click event
this.searchQuery$ = this.searchClick$.pipe(
map(() => <Query>{
offset: 0,
limit: 10
})
);
this.metrics$ = this.searchQuery$
.pipe(
//...
);
}
Однако запрос запускается дважды.
Я создаю подписки, используя async
pipe:
<div class="row" *ngIf="!(metrics$ | async)" style="margin: 1.54em;">
<div *ngIf="metrics$ | async; let metric;"...
Есть идеи?