虽然您在技术上可以利用@KathirMagaesh 建议beforeModel
的那样通过获取控制器this.controllerFor
,但我实际上并不提倡这种解决方案。这绝对不是正常或预期的Ember 模式。此外,如果您查看转换 api,则没有引用transition.targetName
. 如果可行,则这是私有 api,因此很脆弱。
如果您需要根据当前路由更改属性,您应该使用公共路由器服务,它为此目的提供了一些有用的属性!
例如,在您的控制器中,您可以有一个计算属性,该属性利用路由器服务来确定页面标题应该是什么
import Controller from '@ember/controller';
import { computed } from '@ember/object';
import { inject } from '@ember/service';
// this injects the router service into our component via Ember's DI framework
router: inject(),
export default Controller.extend({
pageTitle: computed('router.currentRouteName', function(){
let currentRoute = this.router.currentRouteName;
if(currentRoute === 'foo'){
return 'page title';
}
// do other stuff for other routes.
})
})
这利用了currentRouteName,它是句点分隔的名称,如foo.bar
. 您还可以通过currentURL访问 url,这将是/foo/bar
PS。由于我还没有使用过 ES6 类,所以我提供了老式的 ember 解决方案。您可能需要使用@computed
装饰器或@tracked
我正在使用该computed
功能的地方。我只知道 RFC 和很棒的博客文章中的 Octane ember 样式,但我不了解最新的内容。
聚苯乙烯。如果您使用的是旧 ember,则当前路由名称/URL 属性在应用程序控制器上可用。