91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-05 14:54:07 來源:腳本之家 閱讀:166 作者:zhuchenshu 欄目:web開發

問題:

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

<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請求防抖處理第一次請求失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新余市| 贺州市| 武功县| 梧州市| 洛南县| 房产| 黑水县| 特克斯县| 西安市| 德保县| 临江市| 长沙县| 博乐市| 郸城县| 营山县| 宁化县| 甘孜县| 泾阳县| 读书| 庄河市| 竹山县| 文山县| 黄龙县| 靖州| 水富县| 汉阴县| 宜州市| 黄梅县| 星子县| 漳浦县| 西丰县| 锦屏县| 信阳市| 沙田区| 汕头市| 泰州市| 云南省| 乌审旗| 伊宁县| 如皋市| 惠水县|