Skip to content

Latest commit

 

History

History
94 lines (70 loc) · 2.67 KB

no-deprecated-router-transition-methods.md

File metadata and controls

94 lines (70 loc) · 2.67 KB

ember/no-deprecated-router-transition-methods

💼 This rule is enabled in the ✅ recommended config.

🔧 This rule is automatically fixable by the --fix CLI option.

Ember 3.26 introduced a deprecation for using transitionTo and replaceWith in Routes or transitionToRoute and replaceRoute in Controllers. These methods should be replaced with an injected router service and calls to this.router.transitionTo and this.router.replaceWith instead.

Rule Details

This rule checks for uses of transitionTo and replaceWith in Routes or transitionToRoute and replaceRoute in Controllers.

Examples

Examples of incorrect code for this rule:

// app/routes/settings.js
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class SettingsRoute extends Route {
  @service session;

  beforeModel() {
    if (!this.session.isAuthenticated) {
      this.transitionTo('login');
    }
  }
}
// app/controllers/new-post.js
import Controller from '@ember/controller';
import { action } from '@ember/object';

export default class NewPostController extends Controller {
  @action
  async save({ title, text }) {
    const post = this.store.createRecord('post', { title, text });
    await post.save();
    return this.transitionToRoute('post', post.id);
  }
}

Examples of correct code for this rule:

// app/routes/settings.js
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class SettingsRoute extends Route {
  @service('router') router;
  @service('session') session;

  beforeModel() {
    if (!this.session.isAuthenticated) {
      this.router.transitionTo('login');
    }
  }
}
// app/controllers/new-post.js
import Controller from '@ember/controller';
import { action } from '@ember/object';
import { inject as service } from '@ember/service';

export default class NewPostController extends Controller {
  @service('router') router;

  @action
  async save({ title, text }) {
    const post = this.store.createRecord('post', { title, text });
    await post.save();
    return this.router.transitionTo('post', post.id);
  }
}

Migration

The autofixer for this rule will update method calls to use the router service, and will inject the router service as needed.

References