From f791e9f0816ecd5d67dfeec9a259f5d076942d84 Mon Sep 17 00:00:00 2001 From: "JiaLi.Passion" Date: Tue, 28 Nov 2017 15:27:19 +0900 Subject: [PATCH] fix(core): fix #20582, don't need to wrap zone in location change listener (#20640) PR Close #20640 --- packages/router/src/router.ts | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/router/src/router.ts b/packages/router/src/router.ts index fcbdeb7627..952ead4a29 100644 --- a/packages/router/src/router.ts +++ b/packages/router/src/router.ts @@ -34,8 +34,6 @@ import {UrlSerializer, UrlTree, containsTree, createEmptyUrlTree} from './url_tr import {forEach} from './utils/collection'; import {TreeNode, nodeChildrenAsMap} from './utils/tree'; -declare let Zone: any; - /** * @whatItDoes Represents the extra options used during navigation. * @@ -306,10 +304,11 @@ export class Router { * Sets up the location change listener. */ setUpLocationChangeListener(): void { - // Zone.current.wrap is needed because of the issue with RxJS scheduler, - // which does not work properly with zone.js in IE and Safari + // Don't need to use Zone.wrap any more, because zone.js + // already patch onPopState, so location change callback will + // run into ngZone if (!this.locationSubscription) { - this.locationSubscription = this.location.subscribe(Zone.current.wrap((change: any) => { + this.locationSubscription = this.location.subscribe((change: any) => { const rawUrlTree = this.urlSerializer.parse(change['url']); const source: NavigationTrigger = change['type'] === 'popstate' ? 'popstate' : 'hashchange'; const state = change.state && change.state.navigationId ? @@ -317,7 +316,7 @@ export class Router { null; setTimeout( () => { this.scheduleNavigation(rawUrlTree, source, state, {replaceUrl: true}); }, 0); - })); + }); } }