2016-12-25 3 views
0

У меня есть компонент, который принимает AbstractControl в Input:Слушайте форму, представившего из компонента в угловых 2

export class FormControlContainerComponent implements OnInit { 
    @Input() control: AbstractControl; 

    ngOnInit(): void { 
     // this.control.root is a form 
    } 
} 

Я знаю, что я могу получить доступ к форме, используя control.root. Как я могу прослушать форму, отправленную с этого компонента? Является ли это возможным?

Я использую angular 2.3.

ответ

0

Я не думаю, что это возможно, я не мог найти ничего подобного в исходном коде, но я придумал эту идею.

Где вы определяете форму:

<form [formGroup]="controlGroup (submit)="controlGroup.submit.emit(controlGroup.value)"> 

    <input [formControl]='firstNameControl' name="firstname"> 
</form> 

в своем классе;

export class MyComponent { 

    private controlGroup = new FormGroup({}); 
    // this is your root controlGroup , how ever else you've created this is alright 

    constructor(){ 
    this.controlGroup.submit = new EventEmitter<any>(); 
    // we inject an event emitter inside the root controlGroup 


    this.controlGroup.submit.subscribe((data)=>{ 
     console.log('form is submitted with value ',data); 
    }); 
    } 
} 

И тогда вы могли бы сделать:

export class FormControlContainerComponent implements OnInit { 
    @Input() control: AbstractControl; 

    ngOnInit(): void { 
     this.control.root.submit.subscribe((data)=>{ 
      console.log('form is submitted with value ',data); 
     }); 
    } 
} 

Очевидно, что это выглядит как немного рубить, но это не имеет никакого вреда, предпочтительным способом было бы определить новый класс, который простирается от FormGroup и предоставляет эту функцию отправки, но мне было лениво сделать это: D

Смежные вопросы