Angular2将Child Component表单值作为Objectable传递给父组件

时间:2016-07-20 21:33:21

标签: angular angular2-forms

我正在尝试将子组件表单值作为Observable传递给父组件。提交表单时,在触发从其中一个下拉菜单中选择某些内容之类的事件之前,无法访问子组件表单值。有关如何访问默认值以及现有valueChanges事件的任何想法吗?

//Child Component
import {Component, Output} from '@angular/core'
import {FORM_DIRECTIVES, FormBuilder, ControlGroup} from '@angular/common'
import {Observable} from 'rxjs/Rx';

@Component({
  selector: 'state',
  providers: [FormBuilder],
  templateUrl: 'app/state.html',
  directives: []
})

export class State {

  statesDropDownValues = ['NJ', 'NY', 'PA', 'CA'];
  countriesDropDownValues = ['USA', 'CANADA', 'MEXICO', 'INDIA'];

  stateForm: ControlGroup

  @Output()
  stateFormChanges: Observable<any>;  

  constructor(fb: FormBuilder) {
    this.stateForm = fb.group({
      'state': 'NY',
      'country': 'USA',
      'zip': '10017'
    });

    this.stateFormChanges = this.stateForm.valueChanges;
  }

}

// Parent Component
import {Component} from '@angular/core'
import {FORM_DIRECTIVES, FormBuilder, ControlGroup, Validators} from '@angular/common'
import {State} from './state'

@Component({
  selector: 'my-app',
  providers: [FormBuilder],
  templateUrl: 'app/app.html',
  directives: [State]
})

export class App {
  registrationForm: ControlGroup;

  state: string;
  country: string;
  zip: string;

  constructor(fb: FormBuilder) {

    this.registrationForm = fb.group({
      'name': 'Test Name',
      'email': 'abc@xyz.com'
    });
  }

  handleStateFormChanges(formValues) {
    this.state = formValues.state;
    this.country = formValues.country;
    this.zip = formValues.zip;
  }

  onSubmit() {
    alert('Entered Name: ' + this.registrationForm.value.name);
    alert('State Selected: ' + this.state);
    alert('Country Selected: ' + this.country);
    alert('Zip Entered: ' + this.zip);
  }
}

这是我的代码的plunkr

0 个答案:

没有答案
相关问题