guides-source icon indicating copy to clipboard operation
guides-source copied to clipboard

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

Open deanmarano opened this issue 1 year ago • 0 comments

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?

deanmarano avatar Nov 20 '24 15:11 deanmarano