因此,我正在監聽一個路由引數:
span class="hljs-attr">searchResults$: Observable<string[]> 。
constructor()
私人路線。ActivatedRoute,
private svc: 搜索服務) {
this.searchResults$ = this。 route.paramMap.pipe(
map((p: ParamMap) => p.get('searchTerm') )。)
switchMap((searchTerm: string) => this. svc.getSearchResults(searchTerm))
);
......我正在用異步管道解開它......
<p>Search Results</p>
<ul *ngIf="searchResults$ | async as results; else loading" >
<li *ngFor="let r of results"/span>>
{{ r }}
</li>
</ul>/span>
<ng-template #loading>Loading!!11!</ng-template>
我正在使用ChangeDetectionStrategy.OnPush,并希望繼續這樣做
每當組件第一次被初始化時,這都是非常好的。
但是,如果我使用angular router來提供一個不同的路由引數(當組件仍在加載時):
this。 router.navigate(['search/${searchTerm}'] )
那么searchResult$的可觀察性就永遠不會被定義,else loading也不會被呼叫。 一個新的串列只是取代了舊的串列,而沒有向用戶表明正在進行加載。
是否有一種對OnPush友好的方法來讓加載模板在路由paramMap觀察器提供一個新值時顯示出來?
我曾嘗試回到默認的變更檢測,并在我的可觀察組件中拋出一堆tap(() => this.isloading = true;)--但我不想這樣做,我想看看我是否可以在使用OnPush變更檢測時做到這一點。
uj5u.com熱心網友回復:
你可以簡單地讓你的switchMapped可觀察 startWith undefined:
this.searchResults$ = this。 route.paramMap.pipe(
map(p => p.get('searchTerm') )。)
switchMap(span class="hljs-params">searchTerm => this. svc.getSearchResults(searchTerm).pipe(
startWith(undefined)
))
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/307498.html
標籤:
