Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 调用离子2组件中的函数_Typescript_Ionic2 - Fatal编程技术网

Typescript 调用离子2组件中的函数

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

我正在开发一个有很多表单的应用程序。其中一些表单非常大(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 { 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的更新问题。