【发布时间】:2018-01-06 08:52:15
【问题描述】:
我正在尝试在 ionic 2 中关闭我的模态。
我的组件看起来像这样:
export class DynamicModalComponent<T extends IHasId> {
modalOptions: DynamicModalOptions<T>
constructor(public navCtrl: NavController, public navParams: NavParams) {
this.modalOptions = navParams.get('modalOptions');
}
close() {
this.modalOptions.viewCtrl.dismiss();
}
}
我的 html 看起来像这样:
<ion-header>
<ion-navbar align-title="center">
<ion-title> Dynamic Modal Header </ion-title>
<ion-buttons end>
<button (click)="close()" ion-button>
<ion-icon name="save"></ion-icon>
Cancel
</button>
</ion-buttons>
</ion-navbar>
</ion-header>
当我单击取消按钮时,我的函数被触发,但没有任何内容被关闭。我认为问题不会出在调用类中,而只是以防万一发布相关部分:
constructor(public navCtrl: NavController, public viewCtrl: ViewController, public navParams: NavParams, public baseProvider: UserSkills,
public enumProvider: Enums, public modalCtrl: ModalController, routes: Routes) {
}
showModal(modalOptions: DynamicModalOptions<UserSkill>) {
let modal = this.modalCtrl.create(DynamicModalComponent, { modalOptions });
modal.present();
return modal;
}
onItemClick(entity) {
var modalOptions = this.getDynamicModalOptions(entity);
this.showModal(modalOptions);
}
getDynamicModalOptions(entity: UserSkill): DynamicModalOptions<UserSkill> {
var modalOptions = new DynamicModalOptions<UserSkill>();
modalOptions.entity = entity;
modalOptions.editOptions = this.editOptions;
modalOptions.inputMetadata = this.getInputMetadata();
modalOptions.viewCtrl = this.viewCtrl;
return modalOptions;
}
【问题讨论】:
-
getDynamicModalOptions会以这种方式调用吗?我不确定是否需要耦合ViewController,因为您始终可以将其注入DynamicModalComponent的构造函数中 -
真的,我要调查一下,因为 ViewController 和 NavController 很特殊,它们不能轻易注入提供程序,这段代码最初是通过提供程序完成的,但我将其提取到组件中
-
@OluwafemiSule 已修复,如果您将其作为答案发布,我会将其标记为正确!
-
是的,问题是您传递了错误的
ViewController实例。您传递的是调用者的ViewController的实例,而不是代表模式的ViewController。因此viewCtrl.dismiss();没有做任何事情(因为模态存在于DynamicModalComponent而不是调用者组件中)。解决此类问题的另一种方法是使用注入器 (public injector: Injector) 在DynamicModalComponent组件上获取正确的实例 (viewCtrl = this.injector.get(ViewController);)
标签: javascript html angular typescript ionic2