2016-02-05 33 views
1

他...我有一個孩子的組成部分,我試圖將孩子的表單值注入父項。我正對照組,但我不能夠得到values.I作出這裏plunker演示http://plnkr.co/edit/I5feR6NHdQuTT7rJrVYA?p=preview爲什麼我不能將子組件的值注入到父組件中?

onSubmit(value) { 
console.log(this.app.addressForm.value); 
console.log('you submitted value: ', value); 
} 

我這是怎麼讓孩子形式的價值我已經提到父組件的供應商...有人請告訴我如何獲取子組件的表單值時,輸入什麼東西?

回答

4

在看看你的plunkr後,我在這裏看到了幾種可能性:

  • 您可以使用ViewChild註釋直接引用子組件,如Address之一。看到這個答案Angular2 : No provider for String! (child -> String) in [Array in parent

    @Component({ 
        (...) 
    }) 
    export class AppComponent { 
        @ViewChild(Address) 
        address:Address; // your app property 
        (...) 
    } 
    

    可以使用address屬性,當你提交按鈕點擊訪問該Address組件的addressForm財產。

  • 是否要定義和管理您的AppComponent中的所有控件?如果是這樣的話,可以將它們作爲Address組件的參數傳遞給它們。這樣你將通過引用來工作,以便你的父組件在點擊提交按鈕時知道這個值。類似的東西:

    @Component({ 
        (...) 
    }) 
    export class Address{ 
        @Input() 
        address1Ctrl:Control; 
        @Input() 
        cityCtrl:Control; 
    
        constructor() { 
        // No need to configure controls here 
        } 
    } 
    
    @Component({ 
        (...) 
        template: ` 
        (...) 
        <address [address1Ctrl]="myForm.controls.address1" 
          [cityCtrl]="myForm.controls.address1"></address> 
        (...) 
        ` 
    }) 
    export class AppComponent { 
        constructor(fb: FormBuilder) { 
        this.myForm = fb.group({ 
        'name': ['', Validators.required], 
        'address1': new Control('',Validators.required), 
        'city':new Control('',Validators.required) 
        'Phone': ['', Validators.required] 
        }); 
    } 
    
  • 的最後一個選項是實現一個NgForm/NgControl順應部件。這是一種更高級的方法。看到這個答案的詳細信息:Angular 2 custom form input

我用第一種方法重構你的plunkr。看到這個新的plunkr:http://plnkr.co/edit/sTEU4Fz7b7TXtRo1LXgK?p=preview

相關問題