Get current route name in Ember

前端 未结 10 2110
我在风中等你
我在风中等你 2020-11-30 05:20

I need to get the current route name in my ember application; I tried this: Ember App.Router.router.currentState undefined but it doesn\'t work for me (there is probablig so

相关标签:
10条回答
  • 2020-11-30 05:51

    With the shift to components, it is harder to get route name. The best way is to add an initializer such as

    ember g initializer router
    

    (from command line), and

    export function initialize(application) {
      application.inject('route', 'router', 'router:main');
      application.inject('component', 'router', 'router:main');
    }
    
    export default {
      name: 'router',
      initialize
    };
    

    in a initializers/router.js. You can also inject into controller if you need to. Then just do simply

    this.get('router.currentRouteName');
    

    in JS, or

    {{router.currentRouteName}}
    

    in template.

    This is the only way I have found to get it reliably, and observable in Ember 2.4

    0 讨论(0)
  • 2020-11-30 05:56

    I had the same problem for a while. then i started exploring router. It always have a state object which can be obtained from any route using

    var route = this;
    var handlerInfos = route.get("router.router.state.handlerInfos");
    var currRouteHandlerInfo = handlerInfos[handlerInfos.length-1];
    var currRouteName = currRouteHandlerInfo.name; //"home"
    

    that's it. Now you have the current route name!

    if you want the current route params,

    var routerParams = this.get("router.router.state.params");
    var currRouteParams = routerParams[currRouteName]; //{ homeId : "1" }
    
    0 讨论(0)
  • 2020-11-30 05:57

    NOTE: as of Ember 3.16, the original answer is not only recommended, but observers are strongly discouraged.

    To get the current route name, you can utilize the Router Service: https://api.emberjs.com/ember/3.18/classes/RouterService/properties/currentRouteName?anchor=currentRouteName

    export default class MyComponent extends Component {
      @service router;
    
      get activeRoute() {
        return this.router.currentRouteName;
      }
    }
    

    Original answer below


    You could observe the application's currentPath and set it to the current route accordingly when it changes:

    App = Ember.Application.create({
      currentPath: '',
    });
    
    App.ApplicationController = Ember.Controller.extend({
      updateCurrentPath: function() {
        App.set('currentPath', this.get('currentPath'));
      }.observes('currentPath')
    }),
    

    This way you have access to the currentPath when ever you want with App.get('currentPath');

    E.g.

    if (App.get('currentPath') == 'home'){
      this.transitionTo(userLang);
    }
    

    Hope it helps.

    0 讨论(0)
  • 2020-11-30 05:58

    Just as an update, in Ember 1.8.1, we can get the routeName inside an Ember.Route object by doing this.routeName.

    0 讨论(0)
提交回复
热议问题