我正在尝试迁移到 Ember 中的新路由器。用例是这样的:用户未登录,但请求需要登录的 URL。他被重定向到登录路径,成功登录后,他被重定向到原来的目的地。
我通过覆盖 Router.route(path) 并在应用程序处于未经授权状态时拦截路径请求,使用先前的路由器实现了这一点。
新的路由器没有 route() 函数,而且我不知道如何覆盖它,因为路由器实例是由 Ember 自动创建的。我可能不应该那样做。
有一个看起来很有用的 Route.redirect() 钩子。但是,Route 不再扩展 v2 Router 中的 Path,因此没有 Root.path,也没有将路径信息传递给 Route.redirect(),所以我不知道如何保存调用 transitionTo() 的路径信息之后。
我在下面提供了我的一般方法。我怎样才能做到这一点?对于许多应用程序来说,这似乎是一个非常常见的用例。
// i imagine something like this should happen
App.AuthRequiredRoute = Ember.Route.extend({
redirect: function() {
if(!App.controllerFor('login').get('isLoggedIn')) {
var pathToSave = ????
App.controllerFor('login').set('pathAfterLogin',pathToSave);
this.transitionTo('login');
}
}
}
// and then after login, the LoginController would call App.router.transitionTo(this.pathAfterLogin)