UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

110 lines (109 loc) 4.28 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { Injectable, Inject, Optional } from 'angular2/core'; import { LocationStrategy, APP_BASE_HREF } from './location_strategy'; import { Location } from './location'; import { PlatformLocation } from './platform_location'; import { isPresent } from 'angular2/src/facade/lang'; /** * `HashLocationStrategy` is a {@link LocationStrategy} used to configure the * {@link Location} service to represent its state in the * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) * of the browser's URL. * * For instance, if you call `location.go('/foo')`, the browser's URL will become * `example.com#/foo`. * * ### Example * * ``` * import {Component, provide} from 'angular2/core'; * import { * Location, * LocationStrategy, * HashLocationStrategy * } from 'angular2/platform/common'; * import { * ROUTER_DIRECTIVES, * ROUTER_PROVIDERS, * RouteConfig * } from 'angular2/router'; * * @Component({directives: [ROUTER_DIRECTIVES]}) * @RouteConfig([ * {...}, * ]) * class AppCmp { * constructor(location: Location) { * location.go('/foo'); * } * } * * bootstrap(AppCmp, [ * ROUTER_PROVIDERS, * provide(LocationStrategy, {useClass: HashLocationStrategy}) * ]); * ``` */ export let HashLocationStrategy = class HashLocationStrategy extends LocationStrategy { constructor(_platformLocation, _baseHref) { super(); this._platformLocation = _platformLocation; this._baseHref = ''; if (isPresent(_baseHref)) { this._baseHref = _baseHref; } } onPopState(fn) { this._platformLocation.onPopState(fn); this._platformLocation.onHashChange(fn); } getBaseHref() { return this._baseHref; } path() { // the hash value is always prefixed with a `#` // and if it is empty then it will stay empty var path = this._platformLocation.hash; if (!isPresent(path)) path = '#'; // Dart will complain if a call to substring is // executed with a position value that extends the // length of string. return (path.length > 0 ? path.substring(1) : path); } prepareExternalUrl(internal) { var url = Location.joinWithSlash(this._baseHref, internal); return url.length > 0 ? ('#' + url) : url; } pushState(state, title, path, queryParams) { var url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams)); if (url.length == 0) { url = this._platformLocation.pathname; } this._platformLocation.pushState(state, title, url); } replaceState(state, title, path, queryParams) { var url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams)); if (url.length == 0) { url = this._platformLocation.pathname; } this._platformLocation.replaceState(state, title, url); } forward() { this._platformLocation.forward(); } back() { this._platformLocation.back(); } }; HashLocationStrategy = __decorate([ Injectable(), __param(1, Optional()), __param(1, Inject(APP_BASE_HREF)), __metadata('design:paramtypes', [PlatformLocation, String]) ], HashLocationStrategy);