ember-route-promise-chain
Information
A tiny ember-cli addon to enable promise-based hooks upon entering or exiting routes.
Usage
Install the addon with ember-cli.
ember install ember-route-promise-chain
Create a new instance-initializer and inject the addon.
; { ;} name: 'route-promise-chain' initialize;
In order to define a new hook, you can setup your routes as follows:
Route;
Both hooks are executed when the transition finishes. On leaving routes, onExit
hooks are executed, and on entering routes onEnter
hooks are executed.
Also, you can setup conditions for your hook to execute. Every condition is evaluated just before promise
is executed, if the condition returns false
, promise
won't be executed.
Route;
On nested routes, onExit
hooks are executed in child-parent
order whilst onEnter
hooks are executed in parent-child
order. So, for example, in the next figure,
hooks, are executed as follows:
- onExit: Child A.A -> Parent A.
- onEnter: Parent B -> Child B.A.
Or, as follows:
- First, Child A.A, onExit method.
- Next, Parent A, onExit method.
- Next, Parent B, onEnter method.
- Last, Child B.A, onEnter method.
Every hook must return an array with objects with promise
property. Optionally, a condition
property can be used to define conditions for the object. This objects are known as chains
.
Hooks onEnter
and onExit
, and properties promise
and condition
can be async functions.
Route;
When a chain (condition
or promise
properties) returns a rejection, next chains on same hierarchy are not executed.
When a chain triggers a transition to another route, next chains on all hierarchies are not executed.
Extending routes can be handy to define some behaviour in order to set promise chains dependencies. On the next example, my-promise
chain will only execute if promise-base
chain is not going to be executed.
// File: base.jsRoute; // File: my-route.js;
Contribute
If you want to contribute to this addon, please read the CONTRIBUTING.md.
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
Authors
See the list of contributors who participated in this project.
License
This project is licensed under the MIT License - see the LICENSE.md file for details