2017-06-01 52 views
1
嵌套對象

所以我有這種形式,它工作正常..但現在我想延長JSON結構的一些...使用FormBuilder

https://plnkr.co/edit/aYaYTBRHekHzyS0M7HDM?p=preview

新的結構我想用看起來是這樣的(只地址:已經改變)

email: ['', [Validators.required, Validators.email]], 
    password: ['', [Validators.required, Validators.minLength(5)]], 
    address: this.fb.array([{ 
    name: '', 
    addressLine1: ['', [Validators.required]], 
    city: ['', [Validators.required]], 
    postalCode: [Validators.required], 
    }]), 

但我不斷收到類似的錯誤「錯誤類型錯誤:control.registerOnChange不是一個函數」。發現這與formControlName缺失有關,但我不希望所有數據都顯示出來。

在輸入字段中,我只希望addressLine1顯示(根本不顯示name,city或postalCode)。

+0

那麼當'地址'控制下的文件被使用?拋出錯誤,因爲沒有formControl命名地址更多,而不是這是FormArray –

+0

也我認爲你誤解了使用FormArray' –

+0

我已經更新了plunkr以顯示它在稍後使用.. – Mackelito

回答

1

我會用一個表單組,而不是爲address一個formarray,所以它看起來像這個:

this.registrationForm = fb.group({ 
    email: ['', [Validators.required, Validators.email]], 
    password: ['', [Validators.required, Validators.minLength(5)]], 
    address: this.fb.group({ // make a nested group 
    name: '', 
    addressLine1: ['', [Validators.required]], 
    city: ['', [Validators.required]], 
    postalCode: [Validators.required], 
    }), 
}); 

然後在你的模板時,請記住,以紀念formGroupName

<md-input-container formGroupName="address"> <!-- Mark the nested formgroup name --> 
    <input mdInput type="text" placeholder="AddressLine1" name="address" 
     formControlName="addressLine1" fodiGoogleplace 
     (updateAdress)="setAdressOnChange($event)"> 
</md-input-container> 

你的叉子PLUNKER

+0

這正是我結束了:) – Mackelito

+0

太棒了!是的,如果你想在其中推入幾個'address'- formgroups,FormArray將是一個很好的解決方案。但很高興解決方案令人滿意!祝你有美好的一天,快樂的編碼:) – Alex