Deprecate Application Controller Router Properties
Summary
This RFC proposes the deprecation of ApplicationController#currentPath and ApplicationController#currentRouteName.
Motivation
These APIs are no longer needed as the RouterService now has RouterService#currentPath and RouterService#currentRouteName.
These fields are only ever present on the application controller which is a weird special casing that we would like to remove.
Additionally, it's likely that there are very few if any consumers of this API as it is not documented.
Transition Path
If you are reliant on ApplicationController#currentPath and ApplicationController#currentRouteName you can get the same functionality from the RouterService to migrate, inject the RouterService and read the currentRouteName or currentPath off of it.
Before:
// app/controllers/application.js
import Controller from '@ember/controller';
import fetch from 'fetch';
export default Controller.extend({
store: service('store'),
actions: {
sendPayload() {
fetch('/endpoint', {
method: 'POST',
body: JSON.stringify({
route: this.currentRouteName
})
});
}
}
})
After:
// app/controllers/application.js
import Controller from '@ember/controller';
import fetch from 'fetch';
export default Controller.extend({
store: service('store'),
router: service('router'),
actions: {
sendPayload() {
fetch('/endpoint', {
method: 'POST',
body: JSON.stringify({
route: this.router.currentRouteName
})
});
}
}
})
How We Teach This
There is likely very few consumers of this functionality and migration path is covered by existing documentation.
Drawbacks
This may introduce churn that we are not aware of.
Alternatives
No real alternative other than keep setting the properties.
Unresolved questions
Optional, but suggested for first drafts. What parts of the design are still TBD?