欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2019年05月17日 12:05:28   作者:zhuchenshu  
這篇文章主要介紹了angular請求防抖及處理第一次請求失效的相關(guān)資料,需要的朋友可以參考下

問題:

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

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

因為我們需要根據(jù)輸入內(nèi)容實時的查詢后臺返回結(jié)果,如果每次更改都要傳給后臺的話,太耗費資源,而且對用戶也不友好,為此我們采用了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() - 等待,直到搜索內(nèi)容發(fā)生了變化。

switchMap() - 把搜索請求發(fā)送給服務(wù)。

但當我們使用的時候發(fā)現(xiàn)在初始化第一次請求的時,并不會調(diào)用service的方法,錯誤代碼如下:

private searchText$ = new Subject<string>();
packages$: Observable<InstrumentAlias[]>;
ngOnInit() {
// 創(chuàng)建可觀察著對象
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,同時還可以自行調(diào)用 next(value) 來產(chǎn)生值,在上面錯誤的代碼中,因為我們先調(diào)用的時next方法,這是雖然產(chǎn)生了值,但是還沒有進行訂閱,所以第一次的值并不會向后臺發(fā)起請求,而之后因為我們已經(jīng)訂閱了這個東西,所以第一次請求之后的請求都有效果。

結(jié)果方法:

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

總結(jié):

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

以上所述是小編給大家介紹的Angular請求防抖處理第一次請求失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • spring+angular實現(xiàn)導(dǎo)出excel的實現(xiàn)代碼

    spring+angular實現(xiàn)導(dǎo)出excel的實現(xiàn)代碼

    這篇文章主要介紹了spring+angular實現(xiàn)導(dǎo)出excel的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • AngularJS入門教程之過濾器用法示例

    AngularJS入門教程之過濾器用法示例

    這篇文章主要介紹了AngularJS過濾器用法,結(jié)合實例形式簡單的分析了AngularJS過濾器的功能及基本用法,并舉例說明了自定義過濾器的實現(xiàn)技巧,需要的朋友可以參考下
    2016-11-11
  • angularjs學習筆記之三大模塊(modal,controller,view)

    angularjs學習筆記之三大模塊(modal,controller,view)

    本文給大家記錄的是angularjs的三大模塊(modal,controller,view)的使用說明,方便初學者能夠順利的學習angularjs.
    2015-09-09
  • AngularJs Understanding the Controller Component

    AngularJs Understanding the Controller Component

    本文主要介紹AngularJs Understanding the Controller Component的內(nèi)容,這里整理了相關(guān)資料,及簡單示例代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • AngularJS中重新加載當前路由頁面的方法

    AngularJS中重新加載當前路由頁面的方法

    下面小編就為大家分享一篇AngularJS中重新加載當前路由頁面的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • angular directive的簡單使用總結(jié)

    angular directive的簡單使用總結(jié)

    directive(指令)是angular的一個非常強大又有用的功能,它相當于實現(xiàn)了組件化的概念,我們可以通過它公共地自定義DOM元素或CLASS類或ATTR屬性,并且在這基礎(chǔ)上進行操作scope、綁定事件等等
    2017-05-05
  • 使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫

    使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫

    這篇文章主要介紹了使用AngularJS 應(yīng)用訪問 Android 手機的圖片庫的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • Angular4學習教程之HTML屬性綁定的方法

    Angular4學習教程之HTML屬性綁定的方法

    這篇文章主要給大家介紹了關(guān)于Angular4學習教程之HTML屬性綁定的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • 再談Angular4 臟值檢測(性能優(yōu)化)

    再談Angular4 臟值檢測(性能優(yōu)化)

    這篇文章主要介紹了再談Angular4 臟值檢測(性能優(yōu)化),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • AngularJS監(jiān)聽路由變化的方法

    AngularJS監(jiān)聽路由變化的方法

    本篇文章主要介紹了AngularJS監(jiān)聽路由變化的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03

最新評論