Javascript 如何在Ember js中获取currentRouteName的动态部分

Javascript 如何在Ember js中获取currentRouteName的动态部分,javascript,ember.js,model,routes,ember-data,Javascript,Ember.js,Model,Routes,Ember Data,我需要URL的'model/thing/1'段的动态部分,因为我试图从嵌套路由中当前加载的模型访问应用程序控制器中的模型数据。是否有方法访问此URL的动态部分,或者是否有其他方法以某种方式访问此数据?模型钩子中的第一个参数是参数,它包含您要查找的内容 指南对此进行了解释: 例如: import Ember from 'ember'; export default Ember.Route.extend({ model(params) { return this.get('store'

我需要URL的'model/thing/1'段的动态部分,因为我试图从嵌套路由中当前加载的模型访问应用程序控制器中的模型数据。是否有方法访问此URL的动态部分,或者是否有其他方法以某种方式访问此数据?

模型钩子中的第一个参数是
参数
,它包含您要查找的内容

指南对此进行了解释:

例如:

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
    return this.get('store').findRecord('photo', params.photo_id);
  }
});

如果您只需要在页面的其他位置(不在当前模板中)显示模型数据(或任何数据),则可以使用或

要访问路由参数,可以插入private并使用其
currentState.routerJsState.params
属性。属性包含按当前路由名称索引的每个可用路由参数,如下所示:

{
   application: {},
   test: {
      model_id: "19"
   },
   test.nested: {
      nested_id: "1"
   }
}
例如,要显示当前路由参数,我们需要沿以下几行进行操作:

controllers/application.js(可以是组件或任何余烬对象)

模板/application.hbs

<div>params={{jsonParams}}</div>
嵌套路由:

routes/nested.js

import Ember from 'ember';

export default Ember.Route.extend({
   dataService: Ember.inject.service('data-service'),

   afterModel(model, transition) {
      this.get('dataService').set('model', model);
   }
});
controllers/application.js:

import Ember from 'ember';

export default Ember.Controller.extend({
   dataService: Ember.inject.service('data-service')
});
模板/application.hbs:

<div>{{dataService.model}}</div>
{{dataService.model}

由于您可能不希望在所有路由中显示此数据,因此您可以插入路由服务并使用
currentRouteName
属性来决定何时显示它。

您将在routes
model
hook中收到它。谢谢,但我需要访问应用程序路由或控制器中的参数。这有可能吗?没有,原因很明显。如果你导航到/?,我不会问原因对我来说是否显而易见。你能澄清一下吗?在这种情况下,返回一个空字符串或类似的东西会有什么问题?在该路由之外有一个特定于路由的动态参数是没有意义的。这与URL在web上的工作方式是一致的。我明白了。对于如何在仅存在于应用程序模板中的标头中显示模型数据,您有什么建议吗?这非常适合获取路由参数,尽管它将其作为计算属性返回,我需要将其作为字符串传递到findRecord中。我要试试虫洞。谢谢对虫洞有效!你是我的救星。这正是我所需要的。
import Ember from 'ember';

export default Ember.Controller.extend({
   dataService: Ember.inject.service('data-service')
});
<div>{{dataService.model}}</div>