国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Angular請求防抖處理第一次請求失效問題

2024-05-06 15:39:20
字體:
來源:轉載
供稿:網友

問題:

根據項目中的需求,需要設計一個下拉框,在輸入時根據內容提供實時的建議,在此我們使用了如下組件,

<p-autoComplete [(ngModel)]="text" [suggestions]="results" (completeMethod)="search($event)"></p-autoComplete>

因為我們需要根據輸入內容實時的查詢后臺返回結果,如果每次更改都要傳給后臺的話,太耗費資源,而且對用戶也不友好,為此我們采用了angular的請求防抖做處理,代碼如下。

packages$: Observable<NpmPackageInfo[]>;private searchText$ = new Subject<string>();search(packageName: string) { this.searchText$.next(packageName);}ngOnInit() { this.packages$ = this.searchText$.pipe( debounceTime(500), distinctUntilChanged(), switchMap(packageName =>  this.searchService.search(packageName, this.withRefresh)) );}

作用如下:

debounceTime(500) - 等待,直到用戶停止輸入(這個例子中是停止 1/2 秒)。

distinctUntilChanged() - 等待,直到搜索內容發生了變化。

switchMap() - 把搜索請求發送給服務。

但當我們使用的時候發現在初始化第一次請求的時,并不會調用service的方法,錯誤代碼如下:

private searchText$ = new Subject<string>();packages$: Observable<InstrumentAlias[]>;ngOnInit() {// 創建可觀察著對象this.packages$ = this.searchText$.pipe(   debounceTime(500),   distinctUntilChanged(),   switchMap(packageName =>    this.instrumentAliasService.queryInstrumentAliasByName(packageName))  );}this.searchText$.next(this.queryName);this.packages$.subscribe((instrumentAliases: Array<InstrumentAlias>) => { this.filteredinstrumentAlias = instrumentAliases;}, () => { console.log('get instrumentAliases error');});

searchText$ 是一個序列,包含用戶輸入到搜索框中的所有值。 它定義成了 RxJS 的 Subject 對象,這表示它是一個多播 Observable,同時還可以自行調用 next(value) 來產生值,在上面錯誤的代碼中,因為我們先調用的時next方法,這是雖然產生了值,但是還沒有進行訂閱,所以第一次的值并不會向后臺發起請求,而之后因為我們已經訂閱了這個東西,所以第一次請求之后的請求都有效果。

結果方法:

在初始化的時候就進行訂閱,這樣在之后的查找我們只需要使用next傳值即可,我們已訂閱的對象就會自動觸發后臺請求。

總結:

寫功能的時候只是簡單的對代碼進行復制粘貼,并沒有真正的理解angular的觀察者的設計機制,通過這個錯誤加深了對angular觀察者的理解。

以上所述是小編給大家介紹的Angular請求防抖處理第一次請求失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對錯新站長站網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 华容县| 尉犁县| 五原县| 常山县| 黑水县| 常州市| 东安县| 吉首市| 翼城县| 芦山县| 利津县| 色达县| 西华县| 成武县| 根河市| 子长县| 资中县| 安溪县| 道真| 许昌县| 鄂伦春自治旗| 于田县| 轮台县| 丹棱县| 平罗县| 阜宁县| 福州市| 汉中市| 嘉兴市| 鄢陵县| 门源| 文安县| 财经| 文水县| 海安县| 景洪市| 灵丘县| 屏山县| 兴安盟| 新平| 左权县|