2016-08-17 19 views
0

私はAngular2/Ionic2でフォームを生成しており、Angularサイトのdynamic form tutorialに従っています。しかし、私のニーズに合わせて、ただ必要なものではなく、より多くのバリデーションが必要です。したがって、このコード。Array.ForEach内で関数を呼び出す

doGenerateKidsBasicFormWithNameAndAge(params: any){ 
let kidsData:any = {}; 

params.forEach(question => { 

     kidsData[question.id] = this.doDecideValidation(question) 
     }); 
    return new FormGroup(kidsData); 
} 

これは、どのタイプの検証が適用されるかを決定する関数です。

doDecideValidation(question){ 
    if(question.type === "text"){ 
     new FormControl(question || '', Validators.compose([Validators.required, Validators.minLength(question.minLength), Validators.maxLength(question.maxLength), Validators.pattern('[a-zA-Z ]*')])); 
    }else if(question.type === "number"){ 
     new FormControl(question || '', Validators.compose([Validators.required])); 
    }else { 
     new FormControl(question || ''); 
    } 
    }; 

これを行うとエラーが発生します。

TypeError: Cannot read property 'setParent' of undefined 

+1

私はどこでもあなたが与えたコードで呼ばなっsetParent'メソッドを '表示されません。その部分も投稿できますか? – Scrambo

+0

TBH私はそれを持っていません。何がSetparentなのですか?私はそれを探していますが、ドキュメントは少しスリムであるようです。良い資源?編集:私はクラス(?)に適用するメソッドを参照してください。フォームを初期化するクラスに適用する必要がありますか?本当にありがとう! –

+0

Edit2:[そして私はこれを参照してください](https://angular.io/docs/dart/latest/api/angular2.web_worker.worker/AbstractControl/setParent.html)それは本当に私を助けません –

答えて

1

Typescript Typesの読書をして、あなたが与えたFormsの例を見ると、問題の原因がわかっているかもしれません。

params: anyには、.forEach()があります。変数は配列でも、配列でなくてもかまいません。 []を次のように叩いてみてください:params: any[]、それが役立つかどうかを確認してください。

+0

ヘルプ@Scramboに感謝しますが、問題を解決しませんでした。私はForEachメソッドの代わりにforループでif/elseステートメントを移動させました。瞬間それは動作しますが、私はそれがかなりではないことを認識しています。 –