Skip to content

Include teardown of this.router.on in "Preventing and Retrying Transitions" #2077

@deanmarano

Description

@deanmarano

In the guides, it is suggested to use this.router.on as a way to prevent a route transition:

https://guides.emberjs.com/release/routing/preventing-and-retrying-transitions/#toc_preventing-transitions-via-routewillchange

However, this listener is never torn down, and will fire for all transitions in the app, regardless if they are from or to the current route.

export default class FormRoute extends Route {
  @service router;

  constructor() {
    super(...arguments);

    this.router.on('routeWillChange', (transition) => {
      if (!transition.to.find(route => route.name === this.routeName) && 
        !confirm('Are you sure you want to abandon progress?')) {
        transition.abort();
      }
    });
  }
};

I'd like to open a PR to include information about using router.off here. Would that be helpful?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions