我已将Ionic 2提示放在提供者(服务)中,如此...
showPromptOk(title, message, callback) {
let prompt = this.alertCtrl.create({
title: title || 'Alert!',
message: message,
buttons: [
{
text: 'Ok',
handler: data => {
if(callback) callback(data);
}
}
]
});
prompt.present();
}
我称之为......
updateAccount() {
let self = this;
this.sk_account.update(this.account)
.subscribe((res) => {
this.sk_utils.showPromptOk('Success!', 'Your account has been updated!', (res) => {
self.edit_account = false;
self.edit_school = false;
});
}
)
}
问题是,在这种情况下“this”或“self”不再有效,它成为提供者(服务)的上下文。如何设置处理程序以将“范围”传递回原始调用者的顶部,以便在设置值时,它们实际上是在原始组件范围内设置它们,而不是提供者范围?
更新1:
添加回调(数据)后,我注意到视图模型不再更新。您可以在控制台中看到值现在设置为false,但视图上的{{edit_account}}插值未更新。请注意,视图上的变量仍为“true”。有什么想法吗?
答案 0 :(得分:0)
尝试使用Subject:showPromptOk
接受Subject,然后处理程序调用“ next method”
在“帐户”组件中,添加一个主题及其订阅,更新逻辑必须在订阅中
Ps:主题必须是静态的
static AccountMustBeUpdated: Subject<any> = new Subject<any>();
ionViewDidLoad(){
AccoutsPage.AccountMustBeUpdated.subscribe(
() => { /* Your update logic here*/} );
不要忘记退订该主题以避免麻烦