fix(Location): make Location#platformStrategy:LocationStrategy property private
BREAKING CHANGE: Location#platformStrategy property was previously accidentaly exported as public If any application requires access to the current location strategy, it should be accessed via DI instead by injecting the LocationStrategy token. The likelyhood of anyone actually depending on this property is very low.
This commit is contained in:
parent
7bc2d9a93a
commit
e93b3d2360
|
@ -52,10 +52,14 @@ export class Location {
|
||||||
/** @internal */
|
/** @internal */
|
||||||
_baseHref: string;
|
_baseHref: string;
|
||||||
|
|
||||||
constructor(public platformStrategy: LocationStrategy) {
|
/** @internal */
|
||||||
var browserBaseHref = this.platformStrategy.getBaseHref();
|
_platformStrategy: LocationStrategy;
|
||||||
|
|
||||||
|
constructor(platformStrategy: LocationStrategy) {
|
||||||
|
this._platformStrategy = platformStrategy;
|
||||||
|
var browserBaseHref = this._platformStrategy.getBaseHref();
|
||||||
this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));
|
this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));
|
||||||
this.platformStrategy.onPopState((ev) => {
|
this._platformStrategy.onPopState((ev) => {
|
||||||
ObservableWrapper.callEmit(this._subject, {'url': this.path(), 'pop': true, 'type': ev.type});
|
ObservableWrapper.callEmit(this._subject, {'url': this.path(), 'pop': true, 'type': ev.type});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -63,7 +67,7 @@ export class Location {
|
||||||
/**
|
/**
|
||||||
* Returns the normalized URL path.
|
* Returns the normalized URL path.
|
||||||
*/
|
*/
|
||||||
path(): string { return this.normalize(this.platformStrategy.path()); }
|
path(): string { return this.normalize(this._platformStrategy.path()); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalizes the given path and compares to the current normalized path.
|
* Normalizes the given path and compares to the current normalized path.
|
||||||
|
@ -90,7 +94,7 @@ export class Location {
|
||||||
if (url.length > 0 && !url.startsWith('/')) {
|
if (url.length > 0 && !url.startsWith('/')) {
|
||||||
url = '/' + url;
|
url = '/' + url;
|
||||||
}
|
}
|
||||||
return this.platformStrategy.prepareExternalUrl(url);
|
return this._platformStrategy.prepareExternalUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: rename this method to pushState
|
// TODO: rename this method to pushState
|
||||||
|
@ -99,7 +103,7 @@ export class Location {
|
||||||
* new item onto the platform's history.
|
* new item onto the platform's history.
|
||||||
*/
|
*/
|
||||||
go(path: string, query: string = ''): void {
|
go(path: string, query: string = ''): void {
|
||||||
this.platformStrategy.pushState(null, '', path, query);
|
this._platformStrategy.pushState(null, '', path, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -107,18 +111,18 @@ export class Location {
|
||||||
* the top item on the platform's history stack.
|
* the top item on the platform's history stack.
|
||||||
*/
|
*/
|
||||||
replaceState(path: string, query: string = ''): void {
|
replaceState(path: string, query: string = ''): void {
|
||||||
this.platformStrategy.replaceState(null, '', path, query);
|
this._platformStrategy.replaceState(null, '', path, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates forward in the platform's history.
|
* Navigates forward in the platform's history.
|
||||||
*/
|
*/
|
||||||
forward(): void { this.platformStrategy.forward(); }
|
forward(): void { this._platformStrategy.forward(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Navigates back in the platform's history.
|
* Navigates back in the platform's history.
|
||||||
*/
|
*/
|
||||||
back(): void { this.platformStrategy.back(); }
|
back(): void { this._platformStrategy.back(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Subscribe to the platform's `popState` events.
|
* Subscribe to the platform's `popState` events.
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import {Injectable, EventEmitter} from '@angular/core';
|
import {Injectable, EventEmitter} from '@angular/core';
|
||||||
import {ObservableWrapper} from '../src/facade/async';
|
import {ObservableWrapper} from '../src/facade/async';
|
||||||
import {Location} from '../index';
|
import {Location} from '../index';
|
||||||
|
import {LocationStrategy} from "../src/location/location_strategy";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A spy for {@link Location} that allows tests to fire simulated location events.
|
* A spy for {@link Location} that allows tests to fire simulated location events.
|
||||||
|
@ -16,6 +17,8 @@ export class SpyLocation implements Location {
|
||||||
_subject: EventEmitter<any> = new EventEmitter();
|
_subject: EventEmitter<any> = new EventEmitter();
|
||||||
/** @internal */
|
/** @internal */
|
||||||
_baseHref: string = '';
|
_baseHref: string = '';
|
||||||
|
/** @internal */
|
||||||
|
_platformStrategy: LocationStrategy = null;
|
||||||
|
|
||||||
setInitialPath(url: string) { this._history[this._historyIndex].path = url; }
|
setInitialPath(url: string) { this._history[this._historyIndex].path = url; }
|
||||||
|
|
||||||
|
@ -101,8 +104,6 @@ export class SpyLocation implements Location {
|
||||||
return ObservableWrapper.subscribe(this._subject, onNext, onThrow, onReturn);
|
return ObservableWrapper.subscribe(this._subject, onNext, onThrow, onReturn);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove these once Location is an interface, and can be implemented cleanly
|
|
||||||
platformStrategy: any = null;
|
|
||||||
normalize(url: string): string { return null; }
|
normalize(url: string): string { return null; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue