// I navigate to the location defined by the given URL segments (pathname, search, 
	// and hash).
	private navigate( urlSegments: UrlSegments ) : void {

		var url = urlSegments.pathname;

		if ( urlSegments.search ) {

			url += ( "?" + urlSegments.search );

		}

		if ( urlSegments.hash ) {

			url += ( "#" + urlSegments.hash );

		}

		// Only push the state if the URL has actually changed. We only need this 
		// because the RetroLocation emits an event and we want this event to be a bit 
		// more closely tied to an actual change in the location.
		if ( url !== this.url() ) {

			this.locationStrategy.pushState(
				// pushState - all the other strategies appear to pass NULL here.
				null,
				// title - all the other strategies appear to pass empty-string here.
				"",
				// path - we are encoding the entire location into the path.
				url,
				// queryParams - we are baking these into the path (above).
				""
			);

			this.popStateEvents.next({
				url: url,
				pop: true,
				type: "popstate"
			});
			
		}

	}
Example #2
0
 /**
  * Changes the browsers URL to the normalized version of the given URL, and pushes a
  * new item onto the platform's history.
  */
 go(path: string, query: any = ''): void {
   this.platformStrategy.pushState(null, '', path, normalizeQuery(query));
   this._update('push');
 }