有没有办法在Ember.js路由器中进行条件重定向,而不会破坏路由器的内部一致性?
答案 0 :(得分:23)
你能做什么(截至今天),是这样的:
root: Ember.Route.extend({
index: Ember.Route.extend({
enter: function(router) {
var logged = /* get from appropriated source... */;
Ember.run.next(function() {
if (logged) {
router.transitionTo('loggedIn');
} else {
router.transitionTo('loggedOut');
}
});
}
}),
loggedIn: Ember.Route.extend({
// ...
}),
loggedOut: Ember.Route.extend({
// ...
})
})
当您在Ember.run.next
时,不要错过enter
,状态转换始终处于待处理状态,因此您必须在此之后进行转换。
我们使用它如真实所示,但您可以想象在任何条件下使用它......
答案 1 :(得分:3)
新路由器现在包含
beforeModel
在转换到路线时可以覆盖的钩子以包含条件逻辑。 beforeModel钩子将在
之前调用model
调用钩子并传递一个
transition
对象。您可以决定是否要使用
重定向到其他路线transitionToRoute()
如果您不想通过调用
重定向,则可以中止转换transition.abort()
答案 2 :(得分:2)
根据您尝试做的事情,您可能正在寻找条件转换。 another stackoverflow question涵盖了这一点,其TLDR是检查this fiddle。