【发布时间】:2016-08-04 13:59:46
【问题描述】:
我有一个登录视图,它存在于它自己的外壳中。如果任何 http 请求返回 unauthorized 状态,我还调整了 HttpClient 以自动重定向到 login shell。
此外,在用户“强制”注销后,我想在登录页面上向用户显示一些文本信息。如何将信息(下面代码中的logoutReason)从MyHttpClient 传递到login shell/view 模型?
这是一些概念性代码:
login.js
// ...
export class Login {
username = '';
password = '';
error = '';
// ...
login() {
// ... login code ...
this.aurelia.setRoot('app'); // Switch to main app shell after login succeeded...
}
// ...
}
MyHttpClient.js
// ...
export default class {
// ...
configure() {
this.httpClient.configure(httpConfig => {
httpConfig.withInterceptor({
response(res) {
if (401 === res.status) {
this.aurelia.setRoot('login');
let logoutReason = res.serversLogoutReason;
// How should i pass the logoutReason to the login shell/view model?
}
return res;
}
}});
};
// ...
}
解决方案:
我选择采用bluevoodoo1's comment 中建议的“事件”路径并进行一些调整:
-
MyHttpClient触发/发布一个新的HttpUnauthorized事件,其中包含所需的信息(描述文本等) -
MyHttpClient不再更改外壳,因为 401 的具体处理不应该是他关心的问题 -
login.js订阅HttpUnauthorized事件,更改外壳并显示说明文本...
我仍然愿意接受对此解决方案的任何建议/改进想法,因为我不太确定这是否是最好的方法......
【问题讨论】:
-
您可以发布活动吗? github.com/aurelia/event-aggregator
-
感谢您的意见。在原始问题中查看我的编辑...
标签: events publish-subscribe aurelia message-passing