Skip to content

Commit

Permalink
Merge pull request rust-lang#421 from emberjs/deprecate-application-c…
Browse files Browse the repository at this point in the history
…ontroller-props

Deprecate Application Controller Router Properties
  • Loading branch information
rwjblue authored Feb 5, 2019
2 parents 0798670 + a7ea689 commit 6422b49
Showing 1 changed file with 83 additions and 0 deletions.
83 changes: 83 additions & 0 deletions text/0421-deprecate-application-controller-props.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
- Start Date: 2018-19-12
- RFC PR: https://github.com/emberjs/rfcs/pull/421
- Ember Issue: (leave this empty)

# 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:

```js
// 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:

```js
// 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?

0 comments on commit 6422b49

Please sign in to comment.