Есть ли способ иметь условную переадресацию в Ember.js Router, не нарушая внутренней согласованности маршрутизатора?
Emberjs: условное перенаправление в маршрутизаторе
Ответ 1
Что вы могли бы сделать (на сегодняшний день), это что-то вроде этого:
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
, переход состояния всегда ожидает, поэтому вам нужно перейти после этого.
Мы используем его, как показано для аутентификации, но вы можете предположить, что используете его для любого условия, которое вам нужно...
Ответ 2
Новый маршрутизатор теперь включает
beforeModel
который вы можете перетащить, чтобы включить условную логику при переходе на маршрут. Ключ beforeModel вызывается перед
model
Вызывается hook и передается
transition
объект. Вы можете решить, хотите ли вы перенаправить на другой маршрут, используя
transitionToRoute()
или вы можете прервать переход, если вы не хотите перенаправлять, вызывая
transition.abort()
Ответ 3
В зависимости от того, что вы пытаетесь сделать, вы можете искать условные переходы. Это рассматривается в еще одном вопросе о стеке_потока, TL;DR которого должен проверить этот скрипт.