【问题标题】:Access the new ember router in the console在控制台中访问新的 ember 路由器
【发布时间】:2013-01-01 08:26:46
【问题描述】:

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

以前,我可以这样做:

App.router.get("currentPath")

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

我们将不胜感激。

编辑:

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

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

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

【问题讨论】:

    标签: ember.js


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢!我在源中搜索了一段时间,但无法找到它。非常有帮助,谢谢!
    • 这不再可行,因为它显然已从公共 api 中删除。
    • 容器刚刚被重命名,以明确它不应该用作公共 api。出于调试目的,您仍然可以通过以下方式访问路由器:App.__container__.lookup('router:main').router
    【解决方案2】:

    在最新版本中,您可以像这样找到路由器并更改状态:

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

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

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

    【讨论】:

      【解决方案3】:

      从 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

      【讨论】:

        【解决方案4】:

        我认为应该这样做

        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();
        

        【讨论】:

        • 这是一个相当无益的答案..您似乎完全忽略了 App.router 不再返回任何内容的事实。那么做你正在做的事情有什么意义呢?
        • 哎呀,我必须正确阅读问题:-/ , App.router.get("currentPath") 不返回路径,所以我这样做了,无论如何这是前一个版本...你看过源代码了吗?它可能会有所帮助
        • 没关系,我感谢您的努力,尽管我的问题仍未解决。事实上,我已经查看了源代码(实际上有点),但寻找它是一件棘手的事情,因为它实际上意味着我正在寻找不再实现的东西。我希望有人知道另一种能够以某种方式访问​​这些属性的方法。
        • 我刚刚看了一眼新路由器,一次有很多变化!
        • 有一个相关的github问题线程here
        猜你喜欢
        • 2018-01-04
        • 1970-01-01
        • 2012-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多