MOBILE-3254 ionic: double click on item some time make it open twice
This commit is contained in:
		
							parent
							
								
									dc5f8130ff
								
							
						
					
					
						commit
						2dd137595d
					
				| @ -16,9 +16,10 @@ import { | |||||||
|     Component, Optional, ElementRef, NgZone, Renderer, ComponentFactoryResolver, ChangeDetectorRef, ErrorHandler, OnInit, |     Component, Optional, ElementRef, NgZone, Renderer, ComponentFactoryResolver, ChangeDetectorRef, ErrorHandler, OnInit, | ||||||
|     OnDestroy, ViewEncapsulation |     OnDestroy, ViewEncapsulation | ||||||
| } from '@angular/core'; | } from '@angular/core'; | ||||||
| import { Tab, App, Config, Platform, GestureController, DeepLinker, DomController } from 'ionic-angular'; | import { Tab, App, Config, Platform, GestureController, DeepLinker, DomController, NavOptions } from 'ionic-angular'; | ||||||
| import { TransitionController } from 'ionic-angular/transitions/transition-controller'; | import { TransitionController } from 'ionic-angular/transitions/transition-controller'; | ||||||
| import { CoreIonTabsComponent } from './ion-tabs'; | import { CoreIonTabsComponent } from './ion-tabs'; | ||||||
|  | import { TransitionDoneFn } from 'ionic-angular/navigation/nav-util'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Equivalent to ion-tab, but to be used inside core-ion-tabs. |  * Equivalent to ion-tab, but to be used inside core-ion-tabs. | ||||||
| @ -58,4 +59,35 @@ export class CoreIonTabComponent extends Tab implements OnInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|         this.parent.remove(this); |         this.parent.remove(this); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Push a page to the navigation stack. this similar to parent NavController, but perform some check to make | ||||||
|  |      * sure one page won't open multiple time. | ||||||
|  |      */ | ||||||
|  |     push(page: any, params?: any, opts?: NavOptions, done?: TransitionDoneFn): Promise<any> { | ||||||
|  |         if (this.isTransitioning()) { | ||||||
|  |             // Try again later, the app is transitioning, this also happen when the page is first loaded.
 | ||||||
|  |             return new Promise<any>((resolve, reject): void => { | ||||||
|  |                 setTimeout(() => { | ||||||
|  | 
 | ||||||
|  |                     return this.push(page, params, opts, done).then(resolve, reject); | ||||||
|  |                 }, 250); | ||||||
|  |             }); | ||||||
|  |         } else { | ||||||
|  |             const previousViews = this.getViews(); | ||||||
|  |             if (previousViews.length > 0) { | ||||||
|  |                 const previousView = previousViews[previousViews.length - 1]; | ||||||
|  |                 const previousParam = previousView.getNavParams().data; | ||||||
|  | 
 | ||||||
|  |                 // If the view we pushing in have same page's name and identical params, then we won't do anything.
 | ||||||
|  |                 // This is Ionic issue when user clicking too fast on old device or slow internet connection.
 | ||||||
|  |                 if (previousView.name === page && JSON.stringify(previousParam) === JSON.stringify(params)) { | ||||||
|  | 
 | ||||||
|  |                     return Promise.resolve(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return super.push(page, params, opts, done); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user