7

是否有等效的功能可以使用 ember 中的新路由器在控制台中获取 currentPath?

以前,我能够做到这一点:

App.router.get("currentPath")

但是,对于新路由器,您似乎无法以相同的方式访问路由器。实际上 App.router 只是简单地返回 undefined。

在这里的任何帮助将不胜感激。

编辑:

在相关说明中,由于我无法再访问App.router及其属性,我无法弄清楚如何手动触发状态更改。例如,

App.router.transitionTo("some.state")

不再可行。现在每个人都在做什么而不是这个?

4

4 回答 4

12

我在 github 问题中找到了答案。在这里重新发布以供后代使用。

App.container.lookup('router:main').router

..返回路由器。您可以访问 transitionTo 和 handleURL 以手动触发状态更改。不完全确定如何像以前一样获取当前状态,但似乎您可以访问路由器上的 currentHandlerInfos 属性以获取当前处理程序的数组(duh)。

希望这可以防止其他人扯掉他们的头发。

于 2013-01-02T01:40:06.483 回答
4

在最新版本中,您可以找到路由器并更改状态,如下所示:

App.Router.router.transitionTo('posts.comments');

或者

App.Router.router.handleURL('/posts/comments');

我不知道这是否是推荐的方式(此时路由器是一个非常移动的目标),但它现在有效。

于 2013-01-12T04:19:09.960 回答
1

从 Ember 3.9 开始,这里是新的路由器服务 API 文档。

https://api.emberjs.com/ember/3.9/classes/RouterService

import Component from '@ember/component';
import { inject } from '@ember/service';

export default Component.extend({
  router: inject(),

  actions: {
    next() {
      this.router.transitionTo('other.route');
    }
  }
});

另外这里是我发布的关于如何获得currentPath路由器服务的答案。

https://stackoverflow.com/a/55580684/4044548

于 2019-04-08T19:45:29.180 回答
-2

我认为这应该做

function getCurrentPath(){
  str = "currentState.parentState"
  arr = []
  arr.push(App.router.get("currentState.name"))
  while(true){
    name = App.router.get(str+".name");
    arr.push(name)
    str += ".parentState";
    if(name == "root"){
      break;
    }
  }
  return arr.reverse().join(".")
}

currentPath = getCurrentPath();
于 2013-01-01T11:54:54.540 回答