我需要在我的ember应用程序中获取当前路由名称;我试过这个:Ember App.Router.router.currentState undefined但它对我不起作用(有可能是我想念的东西......)我使用Ember rc6并且我有一个多语言应用程序;在applicationRoute我检测到浏览器的语言,我重定向到正确的页面:
this.transitionTo(userLang);
但我希望只有当用户在主页上时才执行此操作,所以这样的事情:
if (currentRoute == 'home'){
this.transitionTo(userLang)
}
您可以观察application
的currentPath
并在其发生变化时将其设置为当前路线:
App = Ember.Application.create({
currentPath: '',
});
App.ApplicationController = Ember.Controller.extend({
updateCurrentPath: function() {
App.set('currentPath', this.get('currentPath'));
}.observes('currentPath')
}),
这样你就可以随时使用qazxsw poi访问qazxsw poi
EG
currentPath
希望能帮助到你。
您可以简单地解析当前URL。这样您可以使用完整的URL作为示例:
/
并从此字符串中提取后缀:
"index"
这是当前的路线名称。
一个简单的JS函数(无论你的Ember版本如何都有效)将是:
http://127.0.0.1:8000/index.html/#/home
使用示例:
/home
这对我来说在1.3.0-beta上工作(快速浏览1.1.2的来源表明它也可以在那里工作):
App.get('currentPath');
请注意,文档说明:
目前,它依赖于浏览器中存在的hashchange事件。
但是,我认为强烈建议不要在生产代码中使用if (App.get('currentPath') == 'home'){
this.transitionTo(userLang);
}
。更可接受的替代方案是使用App.__container__.lookup('router:main').location.lastSetURL
,它提供有关当前Ember路线的信息。
另一种选择是App.__container__
上的App.Router.router.currentHandlerInfos
。您可以将currentRouteName
添加到控制器,然后使用ApplicationController
访问路径名称。这将返回类似needs: ['application']
的东西。
随着向组件的转变,获取路由名称变得更加困难。最好的方法是添加初始化程序,如
controllers.application.currentRouteName
(来自命令行),和
posts.index
在initializers / router.js中。如果需要,您也可以注入控制器。那就干脆做吧
ember g initializer router
在JS,或
export function initialize(application) {
application.inject('route', 'router', 'router:main');
application.inject('component', 'router', 'router:main');
}
export default {
name: 'router',
initialize
};
在模板中。
这是我发现可靠的唯一方法,并且可以在Ember 2.4中观察到
如果要在组件或控制器中获取当前路由,可以注入路由服务(this.get('router.currentRouteName');
)
(对于{{router.currentRouteName}}
)并使用:
routing: Ember.inject.service('-routing')
或more
组件和计算属性的示例:
this.get('routing.currentRouteName')
控制器和计算属性的示例:
this.get('routing.currentPath')
您路线中的当前路线,您只需要import Ember from 'ember';
export default Ember.Component.extend({
routing: Ember.inject.service('-routing'),
checkMyRouteName: Ember.computed('routing.currentRouteName', function() {
return this.get('routing.currentRouteName');
})
})
路线示例:
import Ember from 'ember';
export default Ember.Controller.extend({
routing: Ember.inject.service('-routing'),
checkMyRouteName: Ember.computed('routing.currentRouteName', function() {
return this.get('routing.currentRouteName');
})
})
就像更新一样,在Ember 1.8.1中,我们可以通过执行this.routeName
获取Ember.Route对象中的routeName。
目前,从Ember 1.7.0开始,您可以通过致电import Ember from 'ember';
export default Ember.Route.extend({
checkMyRouteName() {
return this.routeName;
}
})
获取当前路线。
Ember命名空间API现在有一个this.routeName
方法,这对于查找this.routeName
或其他路由属性非常有用。
getOwner
我已经创建了一个currentRouteName
示例来演示。使用“输出”窗格上方的文本输入来命中其他路径,如 const owner = Ember.getOwner(this);
const currentRoute = owner.lookup('router:main').currentRouteName;
const routeInfo = owner.lookup(`route:${currentRoute}`).get('info');
// etc.
,Ember Twiddle或/blue
。
我有一段时间遇到同样的问题。然后我开始探索路由器。它总是有一个状态对象,可以从任何使用的路径获得
/green
而已。现在你有了当前的路线名称!
如果你想要当前的路线参数,
/red
自从2.15开始,恩伯有一个var route = this;
var handlerInfos = route.get("router.router.state.handlerInfos");
var currRouteHandlerInfo = handlerInfos[handlerInfos.length-1];
var currRouteName = currRouteHandlerInfo.name; //"home"
。它提供当前路线的名称为var routerParams = this.get("router.router.state.params");
var currRouteParams = routerParams[currRouteName]; //{ homeId : "1" }
。如果你仍然使用这样一个旧版本,则存在适用于Ember 2.4 - 2.14的RouterService
。
currentRouteName
property
此处提到的所有其他解决方案都依赖于可能已被弃用/删除的私有API。使用polyfill至少在当前版本上工作,在写这篇文章的时候是import Component from '@ember/component';
export default Component.extend({
router: service(),
isHomeRoute: computed('router.currentRouteName', function() {
return this.router.currentRouteName === 'home';
}),
});
。
请注意,RouterService
不是3.12
。根URL称为"home"
。