home
  • Blog
  • Home
  • Projects
    • Ember
    • EmberData
    • Ember CLI
4.12
  • Packages
    • @ember/application
    • @ember/application/namespace
    • @ember/array
    • @ember/array/proxy
    • @ember/canary-features
    • @ember/component
    • @ember/component/template-only
    • @ember/controller
    • @ember/debug
    • @ember/debug/container-debug-adapter
    • @ember/debug/data-adapter
    • @ember/destroyable
    • @ember/engine
    • @ember/error
    • @ember/helper
    • @ember/object
    • @ember/object/core
    • @ember/object/evented
    • @ember/object/mixin
    • @ember/object/observable
    • @ember/object/promise-proxy-mixin
    • @ember/object/proxy
    • @ember/owner
    • @ember/polyfills
    • @ember/renderer
    • @ember/routing
    • @ember/routing/auto-location
    • @ember/routing/hash-location
    • @ember/routing/history-location
    • @ember/routing/location
    • @ember/routing/none-location
    • @ember/routing/route
    • @ember/routing/route-info
    • @ember/routing/router
    • @ember/routing/router-service
    • @ember/routing/transition
    • @ember/runloop
    • @ember/service
    • @ember/string
    • @ember/template
    • @ember/test
    • @ember/utils
    • @glimmer/component
    • @glimmer/tracking
    • @glimmer/tracking/primitives/cache
    • ember/routing
    • rsvp
  • Classes
    • Application
    • ApplicationInstance
    • ApplicationInstance.BootOptions
    • ArrayProxy
    • Component
    • ComputedProperty
    • ContainerDebugAdapter
    • CoreObject
    • DataAdapter
    • Ember.Controller
    • Ember.NativeArray
    • Ember.Templates.helpers
    • Ember.Test
    • Ember.Test.QUnitAdapter
    • EmberArray
    • EmberENV
    • EmberObject
    • EmberRouter
    • Engine
    • EngineInstance
    • EventTarget
    • Evented
    • Factory
    • FactoryManager
    • FullName
    • HashLocation
    • Helper
    • HistoryLocation
    • Mixin
    • MutableArray
    • Namespace
    • NoneLocation
    • ObjectProxy
    • Observable
    • Owner
    • Promise
    • PromiseProxyMixin
    • RegisterOptions
    • Renderer
    • Resolver
    • Route
    • RouteInfo
    • RouteInfoWithAttributes
    • RouterService
    • SafeString
    • Service
    • TestAdapter
    • Transition

Class Location private


Defined in: packages/@ember/routing/location.ts:21
Module: @ember/routing/location
import Location from '@ember/routing/location';

Location returns an instance of the correct implementation of the location API.

Implementations

You can pass an implementation name (hash, history, none, auto) to force a particular implementation to be used in your application.

See HashLocation. See HistoryLocation. See NoneLocation. See AutoLocation.

Location API

Each location implementation must provide the following methods:

  • implementation: returns the string name used to reference the implementation.
  • getURL: returns the current URL.
  • setURL(path): sets the current URL.
  • replaceURL(path): replace the current URL (optional).
  • onUpdateURL(callback): triggers the callback when the URL changes.
  • formatURL(url): formats url to be placed into href attribute.
  • detect() (optional): instructs the location to do any feature detection necessary. If the location needs to redirect to a different URL, it can cancel routing by setting the cancelRouterSetup property on itself to false.

Calling setURL or replaceURL will not trigger onUpdateURL callbacks.

Custom implementation

Ember scans app/locations/* for extending the Location API.

Example:

import HistoryLocation from '@ember/routing/history-location';

export default class MyHistory {
  implementation = 'my-custom-history';

  constructor() {
    this._history = HistoryLocation.create(...arguments);
  }

  create() {
    return new this(...arguments);
  }

  pushState(path) {
     this._history.pushState(path);
  }
}


Methods

On this page


Team Sponsors Security Legal Branding Community Guidelines
Twitter GitHub Discord Mastodon

If you want help you can contact us by email, open an issue, or get realtime help by joining the Ember Discord.

© Copyright 2025 - Tilde Inc.
Ember.js is free, open source and always will be.


Ember is generously supported by
blue Created with Sketch.