【发布时间】:2019-05-28 11:30:24
【问题描述】:
我编写了两个 observables:
一个用于捕获表单提交事件:
<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();
}
如您所见,我在 searchClick$ 上使用 searchClickSubject.asObservable 方法从主题 searchClickSubject 创建了一个 Observable。
从现在开始,我使用这个searchClick$ Observable 来捕捉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 管道创建订阅:
<div class="row" *ngIf="!(metrics$ | async)" style="margin: 1.54em;">
<div *ngIf="metrics$ | async; let metric;"...
有什么想法吗?
【问题讨论】:
-
你在哪里订阅
metrics$?
标签: angular typescript rxjs