最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Angular 2 : Validate child component form fields from the parent component - Stack Overflow

programmeradmin2浏览0评论

Problem statement :

Parent component having <form> tag and some <input> tags inside it, and child component also have some <input> tags, parent component has one <submit> and we are validating form fields on submit the form.

How to validate the child component <input> fields from parent component on submit the form ?

Requirement :

If a parent component has a form containing child components with input components in their template, then these input components should be validate on click if submit from the parent component.

Findings :

There are lot of posts in SO having same problem statement but did not find any suitable solution.All the below posts validate the whole form but my requirement is to validate each field in child component.

  • Angular 2 validation together with the child component
  • Allow template-driven form inputs across a component hierarchy to register with a single parent form
  • How to check the validity of the child component form within the parent component in Angular 4

Problem statement :

Parent component having <form> tag and some <input> tags inside it, and child component also have some <input> tags, parent component has one <submit> and we are validating form fields on submit the form.

How to validate the child component <input> fields from parent component on submit the form ?

Requirement :

If a parent component has a form containing child components with input components in their template, then these input components should be validate on click if submit from the parent component.

Findings :

There are lot of posts in SO having same problem statement but did not find any suitable solution.All the below posts validate the whole form but my requirement is to validate each field in child component.

  • Angular 2 validation together with the child component
  • Allow template-driven form inputs across a component hierarchy to register with a single parent form
  • How to check the validity of the child component form within the parent component in Angular 4
Share Improve this question edited Jan 2, 2018 at 21:07 Mr Lister 46.6k15 gold badges113 silver badges155 bronze badges asked Dec 26, 2017 at 17:07 Rohìt JíndalRohìt Jíndal 27.2k15 gold badges77 silver badges132 bronze badges 8
  • Use model driven form. Because it will check model values not form names of input. – mukund patel Commented Dec 26, 2017 at 17:14
  • I had a very similar requirement, but quite more complex because I had to validate a hierarchy forms, children, nested components and so on. It is very easy to validate using Reactive forms approach angular.io/guide/reactive-forms – Daniel C. Commented Dec 26, 2017 at 17:27
  • Are you facing problem with plugins, like auto-complete or datepiker? – mukund patel Commented Dec 26, 2017 at 17:39
  • stackoverflow.com/a/47695731/4834833 read this. Here a piece of code which added after a given parent element. I hope something help you. – mukund patel Commented Dec 26, 2017 at 17:44
  • Can you post a sample application so we can have more context? – Immanuel Rosal Commented Dec 28, 2017 at 10:57
 |  Show 3 more comments

1 Answer 1

Reset to default 16

We can achieve it using template driven technique as well. Find below the steps :

  • From parent component to child component we have to pass submit button event.

    <button type="button" (click)="enterForm(parentForm)">Submit</button>
    

    Here, parentForm is the form reference.

  • call child component method using @ViewChild decorator from parent to pass submit button event on click of submit.

    @ViewChild('validateChildComponentForm') private ChildComponent: ChildComponent;
    
  • Pass the reference of child form using @ViewChild decorator into the child component.

    @ViewChild('smartyStreetForm') form;
    
    enterForm(parentForm) {
        this.submitted = true;
        this.ChildComponent.validateChildForm(this.submitted);
        if(!parentForm.valid || !this.childFormValidCheck) {
            return;
        } else {
           // success code comes here.
        }                
    }
    
  • Now in child component method we will check that if parent form is submitted and child component form is valid then emit true otherwise false into the parent component. we will use @Output decorator to emit the isChildFormValid value into the parent component.

    @Output() isChildFormValid: EventEmitter<any> = new EventEmitter<any>();
    
    public validateChildForm(data: any) {
        if (data === true) {
            if(this.form.valid === true) {
                this.isChildFormValid.emit(true);
            } else {
                this.isChildFormValid.emit(false);
            }
        }
    } 
    
  • Now in parent component we will get the isChildFormValid value.

    private isChildFormValid(formValid: any) {
        this.childFormValidCheck = formValid;
    }
    

Pictorial representation :

发布评论

评论列表(0)

  1. 暂无评论