fix(core): fix #20582, don't need to wrap zone in location change listener (#20640)

PR Close #20640
This commit is contained in:
JiaLi.Passion 2017-11-28 15:27:19 +09:00 committed by Alex Rickabaugh
parent 3aa7e0228a
commit f791e9f081
1 changed files with 5 additions and 6 deletions

View File

@ -34,8 +34,6 @@ import {UrlSerializer, UrlTree, containsTree, createEmptyUrlTree} from './url_tr
import {forEach} from './utils/collection'; import {forEach} from './utils/collection';
import {TreeNode, nodeChildrenAsMap} from './utils/tree'; import {TreeNode, nodeChildrenAsMap} from './utils/tree';
declare let Zone: any;
/** /**
* @whatItDoes Represents the extra options used during navigation. * @whatItDoes Represents the extra options used during navigation.
* *
@ -306,10 +304,11 @@ export class Router {
* Sets up the location change listener. * Sets up the location change listener.
*/ */
setUpLocationChangeListener(): void { setUpLocationChangeListener(): void {
// Zone.current.wrap is needed because of the issue with RxJS scheduler, // Don't need to use Zone.wrap any more, because zone.js
// which does not work properly with zone.js in IE and Safari // already patch onPopState, so location change callback will
// run into ngZone
if (!this.locationSubscription) { if (!this.locationSubscription) {
this.locationSubscription = <any>this.location.subscribe(Zone.current.wrap((change: any) => { this.locationSubscription = <any>this.location.subscribe((change: any) => {
const rawUrlTree = this.urlSerializer.parse(change['url']); const rawUrlTree = this.urlSerializer.parse(change['url']);
const source: NavigationTrigger = change['type'] === 'popstate' ? 'popstate' : 'hashchange'; const source: NavigationTrigger = change['type'] === 'popstate' ? 'popstate' : 'hashchange';
const state = change.state && change.state.navigationId ? const state = change.state && change.state.navigationId ?
@ -317,7 +316,7 @@ export class Router {
null; null;
setTimeout( setTimeout(
() => { this.scheduleNavigation(rawUrlTree, source, state, {replaceUrl: true}); }, 0); () => { this.scheduleNavigation(rawUrlTree, source, state, {replaceUrl: true}); }, 0);
})); });
} }
} }