是否有一个等效的功能来使用ember中的新路由器来获取控制台中的currentPath?
之前,我能够做到这一点:
App.router.get("currentPath")
然而,似乎使用新的路由器,您无法以相同的方式访问路由器。实际上,App.router只返回undefined。
非常感谢任何帮助。
编辑:
在相关的说明中,因为我无法再访问App.router
及其属性,我无法弄清楚如何手动触发状态更改。例如,
App.router.transitionTo("some.state")
不再可行。现在每个人都在做什么呢?
答案 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');
}
}
});
的答案。
答案 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();