Typescript 调用离子2组件中的函数
我正在开发一个有很多表单的应用程序。其中一些表单非常大(50多个字段)。用户可以填写一个或多个表单,提交表单时,生成的JSON将发送到PHP后端,PHP后端将其转换为CSV 后端PHP服务不知道该结构,它只是将每个JSON元素转换为列/值 问题 目前,如果用户填写了表格1和表格4,则生成的CSV如下所示:Typescript 调用离子2组件中的函数,typescript,ionic2,Typescript,Ionic2,我正在开发一个有很多表单的应用程序。其中一些表单非常大(50多个字段)。用户可以填写一个或多个表单,提交表单时,生成的JSON将发送到PHP后端,PHP后端将其转换为CSV 后端PHP服务不知道该结构,它只是将每个JSON元素转换为列/值 问题 目前,如果用户填写了表格1和表格4,则生成的CSV如下所示: FORM 1, , , FORM 3 Col1,Col2,Col3,Col1,Col2,Col3 Val1,Val2,Val3,Val1,Val2,Val3 import { Form
FORM 1, , , FORM 3
Col1,Col2,Col3,Col1,Col2,Col3
Val1,Val2,Val3,Val1,Val2,Val3
import { FormTwoPage } from '../pages/form-two/form-two';
constructor(public navCtrl: NavController, public navParams: NavParams, public appGlobal: AppGlobal, public formTwo: FormTwoPage) {}
ionViewDidLoad() {
let formTwoObj = this.formTwo.returnFormTwo();
}
我需要改变这一点,所以无论表单2是否填写,它的列都会以空值打印在CSV中。这样,CSV输出将具有一致的结构
可能的方法
解决这个问题的一种方法是为表单2定义一个对象,并将其与表单1和表单3一起发送,其中包含空值:
type Form2 = {
columns : {
col1 : string,
col2 : string,
col3 : string
}
};
let form2Object = {
columns : {
col1 : '',
col2 : '',
col3 : ''
}
} as Form2;
然而,对于我正在使用的许多表单,每个表单都有许多列,这样做实际上需要花费我几天的时间
我希望解决这个问题的第二种方法是创建一个返回表单2值的函数,如下所示:
function returnFormTwo() {
return this.formTwo.value
}
但是,我不知道如何在Ionic 2中调用Form 2组件中的函数
我正在尝试这样的事情:
FORM 1, , , FORM 3
Col1,Col2,Col3,Col1,Col2,Col3
Val1,Val2,Val3,Val1,Val2,Val3
import { FormTwoPage } from '../pages/form-two/form-two';
constructor(public navCtrl: NavController, public navParams: NavParams, public appGlobal: AppGlobal, public formTwo: FormTwoPage) {}
ionViewDidLoad() {
let formTwoObj = this.formTwo.returnFormTwo();
}
我该怎么做呢
谢谢
更新:这就是FormTwoPage的外观:
@Component({
selector: 'page-form-two',
templateUrl: 'form-two.html'
})
export class FormTwoPage {
formTwo: FormGroup;
constructor(public navCtrl: NavController, public navParams: NavParams, public formBuilder: FormBuilder, public toastCtrl: ToastController,
public appGlobal: AppGlobal, public dataService: FormData, public modalCtrl: ModalController) {
this.formTwo = formBuilder.group({
col1: [''],
col2: [''],
col3: ['', Validators.compose([Validators.minLength(3), Validators.maxLength(40)])]
});
}
}
你可以用
确保returnFormTwo()
是public
更新
您不必向构造函数中的页面注入。FormTwoPage不是要在构造函数中设置的提供程序。是从哪个组件调用的html模板的表单部分吗?是的。抱歉,我没有提到。我得到了这个错误:运行时错误无法解析FormTwoPage的所有参数:(NavController、NavParams、FormBuilder、ToastController、AppGlobal、、ModalController)。有什么想法吗?问题解决了吗?若并没有,你们能将FormTwoPage组件添加到问题中吗?对不起,我不明白你们关于@Injectable的更新是什么意思?我应该在某个地方添加@injectable吗?在问题的构造函数中有一个FormTwoPage条目。。它不是提供程序,因此不应将其注入构造函数中。提供程序是用
@Injectable
定义的,而不是@Component
是,但FormTwoPage是一个组件,带有模板和全部。检查FormTwoPage的更新问题。