Ember.js - 如果已经在应用程序中则阻止转换,但如果着陆则重定向
Ember.js - Prevent transition if already in app, but redirect if landing
在Ember.js中,当您点击应用内的link时,您可以使用transition.abort()
有条件地阻止转换到目标页面,例如:
afterModel: function(model, transition) {
if (!model.user.get('facebookAuthenticated')) {
if (confirm("You have to log in with facebook. Continue?")) {
this.controller.send('facebookLogin');
}
else {
transition.abort();
}
}
}
这将取消转换,您将停留在当前页面。
但是,如果您在应用程序中着陆到这条路线,例如通过遵循外部 URL 怎么办?然后默认行为是继续执行 transition.abort()
,这会使您处于 空白页 。完全不能接受。
有没有办法检测用户是否在这条路线上着陆,以便应用程序可以重定向或其他什么?
您可以使用 beforeModel 挂钩来检查用户是否已通过身份验证。
我假设您有某种方式知道您的用户是否通过会话或 cookie 进行身份验证。
如果用户未通过身份验证,您可以立即重定向到另一个页面。
这可以通过阅读 transition.sequence
属性 并使用有条件的 redirect/abort 转换来完成。序列 属性 returns 自登陆 page/loading ember 应用以来当前转换的计数。
if (transition.sequence === 0) {
// Land on page
window.location.replace('http://a.url.com');
}
else {
// Click link in app
transition.abort()
}
在Ember.js中,当您点击应用内的link时,您可以使用transition.abort()
有条件地阻止转换到目标页面,例如:
afterModel: function(model, transition) {
if (!model.user.get('facebookAuthenticated')) {
if (confirm("You have to log in with facebook. Continue?")) {
this.controller.send('facebookLogin');
}
else {
transition.abort();
}
}
}
这将取消转换,您将停留在当前页面。
但是,如果您在应用程序中着陆到这条路线,例如通过遵循外部 URL 怎么办?然后默认行为是继续执行 transition.abort()
,这会使您处于 空白页 。完全不能接受。
有没有办法检测用户是否在这条路线上着陆,以便应用程序可以重定向或其他什么?
您可以使用 beforeModel 挂钩来检查用户是否已通过身份验证。 我假设您有某种方式知道您的用户是否通过会话或 cookie 进行身份验证。
如果用户未通过身份验证,您可以立即重定向到另一个页面。
这可以通过阅读 transition.sequence
属性 并使用有条件的 redirect/abort 转换来完成。序列 属性 returns 自登陆 page/loading ember 应用以来当前转换的计数。
if (transition.sequence === 0) {
// Land on page
window.location.replace('http://a.url.com');
}
else {
// Click link in app
transition.abort()
}