Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ngControl with ngFor in Angular2

Q1. Is it possible to have one Control ie:

ValidNumber = new Control('', CustomValidators.number({min:1, max:10}))

to validate all similar type of input fields in the template ?

Q2. Can these fields be generated by ngFor ?


FailedMethod 1: Validation works but values are coupled.

<input [ngFormControl]="ValidNumber" name="num1" type="number"/>
<input [ngFormControl]="ValidNumber" name="num2" type="number"/>

FailedMethod 2: With formBuilder it's same as above.

<form [ngFormModel]="formBuiltWithFormBuilder">
  <input ngControl="ValidNumber" name="num1" type="number"/>
  <input ngControl="ValidNumber" name="num2" type="number"/>
</from>

Objective Clarification:

  • I'm trying to validate form fields that might be generated with ngFor and require similar validation.

  • Without defining similar Controls repeatedly elsewhere.

  • Values I can extract with any other method like #form="ngForm" or ngModel, all I want from ngControl is Validation.

like image 558
Ankit Singh Avatar asked Oct 18 '22 14:10

Ankit Singh


1 Answers

You can also generate the controls then there is no problem.

@Component({
  ...
  template: `
...
<input *ngFor="let c in controls" [ngFormControl]="c" name="c.name" type="number"/>
...
`
})
class MyComponent {
  // initialization with `['a', 'b', 'c']` just for demo purposes
  // these values probably come from outside - hence @Input()
  @Input() controlNames:string[] = ['a', 'b', 'c']; 

  controls: Control[];

  ngOnInit() {
    this.controlNames.forEach(
        v => this.controls.push(
            new Control('', CustomValidators.number{min:1, max:10})
        )
    );
  }
}

(code not tested)

controls needs to be updated when controlNames changes. ngOnInit() runs only once.

like image 187
Günter Zöchbauer Avatar answered Oct 21 '22 05:10

Günter Zöchbauer