Some utils for working with the Ember RouterService
more effectively.
ember install ember-routing-utils
import { service, type DIRegistry } from '@ember/owner';
class {
@service router: DIRegistry['service']['router'];
@service routingUtils: DIRegistry['service']['routing-utils'];
// ...
}
getParameters(routeInfo: RouteInfo): string[]
Retrieves all parameters for a RouteInfo
object and its parents in correct
order, so that you can pass them to e.g. transitionTo(routeName, ...params)
.
const { currentRoute, currentRouteName } = this.router;
const params = this.routingUtils.getParameters(currentRoute);
this.router.transitionTo(currentRouteName, ...params, currentRoute.queryParams);
getParametersWithQueryParameters(routeInfo: RouteInfo): string[]
Same as getParameters
, but also includes the final { queryParams }
for
convenience.
const { currentRoute, currentRouteName } = this.router;
const params = this.routingUtils.getParametersWithQueryParameters(currentRoute);
this.router.transitionTo(currentRouteName, ...params);
getURLFromRouteInfo(routeInfo: RouteInfo): string
Builds the URL for a RouteInfo
object and its parents. Includes the rootURL
.
const { currentRoute, currentRouteName } = this.router;
const url = this.routingUtils.getURLFromRouteInfo(currentRoute);
removeRootURL(url: string): string
Removes the rootURL
from a URL, so that it can be used with transitionTo()
,
because Ember handles this inconsistently. 🤡
If the URL does not start with the rootURL
or the app has no rootURL
, this
just returns the original url
.
prefixRootURL(url: string): string
Prefixes the rootURL
to a URL.
If the URL already starts with the rootURL
or the app has no rootURL
, this
just returns the original url
.