该应用有以下行为:
当前视图:
async changeDescription(description: FormGroup, i: number) {
const modal = await this.modalController.create({
component: ChangeDescriptionModalComponent,
componentProps: {
wordDescription: description
}
});
modal.onDidDismiss().then(dataReturned => {
if (dataReturned !== null) {
this.wordPartOfSpeechType.controls[i] = dataReturned.data;
}
});
return await modal.present();
}
模式视图:
async onSubmit() {
if (this.isFreeType) {
this.wordDescription.get('type').setValue('');
} else {
this.wordDescription.get('typeFreeForm').setValue('');
}
await this.modalController.dismiss(this.wordDescription);
}
这是最小的工作示例。单击第二个描述块上的铅笔,更改模态内的值并接受它。前一个视图的值不会更改。 https://stackblitz.com/edit/ionic-v4-angular-tabs-kcgngx
答案 0 :(得分:1)
首先要注意的是,您提供的堆叠闪电战绝非轻描淡写;)我去除了堆叠闪电战中的所有噪音以展示问题。所以主要问题是以下几行:
this.wordPartOfSpeechType.controls[i] = dataReturned.data;
您需要使用setValue
或patchValue
来设置值。另外,您还从模态中返回FormGroup
。而是传递以下形式的值:
async onSubmit() {
await this.modalController.dismiss(this.wordDescription.value);
}
那么您可以做:
modal.onDidDismiss().then(dataReturned => {
if (dataReturned) {
this.wordPartOfSpeechType.at(i).setValue(dataReturned.data)
}
});
解雇时,您不需要通过任何内容。您的表格保持不变。
async cancel() {
await this.modalController.dismiss();
}
您的 STACKBLITZ
的叉子