在控制台中访问新的ember路由器

时间:2013-01-01 08:26:46

标签: ember.js

是否有一个等效的功能来使用ember中的新路由器来获取控制台中的currentPath?

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

App.router.get("currentPath")

然而,似乎使用新的路由器,您无法以相同的方式访问路由器。实际上,App.router只返回undefined。

非常感谢任何帮助。

编辑:

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

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

不再可行。现在每个人都在做什么呢?

4 个答案:

答案 0 :(得分:12)

我发现答案隐藏在github问题中。在这里重新张贴后代。

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

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

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

答案 1 :(得分:4)

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

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

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

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

答案 2 :(得分:1)

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

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

.testclass {
  background-color:#ccc;
  width:50px;
  height:50px;
  margin-top:10px;
}
.active {background-color:#000;}


// here we say that this will work for every element with original class
$(".testclass").each(function(){
//here we declare counter to count number of clicks
    var counter = 1;
//add class with changed style on mouse over 
  $(this).mouseover(function(){
    $(this).addClass('active');
  });
// this will define actions on click
  $(this).click(function(){
//add 1 to counter
    counter++;
//if counter is odd, it will add the class. If not- will do nothing
    if (counter % 2 == 1) {
        $(this).toggleClass('active');
    }
  });
});

这也是我发布的有关如何在路由器服务上获得import Component from '@ember/component'; import { inject } from '@ember/service'; export default Component.extend({ router: inject(), actions: { next() { this.router.transitionTo('other.route'); } } }); 的答案。

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

答案 3 :(得分:-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();