2016-02-26 29 views
5

Q1. Có thể có một kiểm soát ví dụ:ngControl với ngFor trong Angular2

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

để xác nhận tất cả các loại tương tự của input trường trong mẫu?

Q2. Các trường này có thể được tạo bởi ngFor không?


FailedMethod 1: Validation hoạt động nhưng giá trị được kết hợp.

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

FailedMethod 2: Với formBuilder nó tương tự như trên.

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

Mục tiêu Làm rõ:

  • Tôi đang cố gắng để xác nhận các trường mẫu mà có thể được tạo ra với ngFor và yêu cầu xác nhận tương tự.

  • Không xác định điều khiển tương tự Điều khiển liên tục ở nơi khác.

  • Giá trị tôi có thể trích xuất bằng bất kỳ phương pháp nào khác như #form="ngForm" hoặc ngModel, tất cả những gì tôi muốn từ ngControl là Xác thực.

Trả lời

3

Bạn cũng có thể tạo điều khiển sau đó không có vấn đề gì.

@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}) 
     ) 
    ); 
    } 
} 

(mã không được kiểm tra)

controls cần phải được cập nhật khi controlNames thay đổi. ngOnInit() chỉ chạy một lần.

+0

Thật thú vị, tôi cũng đã mã hóa một cái gì đó như thế này 'tinh thần' nhưng tôi cũng cố gắng không lặp lại nơi khác ngoài ngFor của mẫu, đó là nơi thử thách thực sự nằm, tôi nghĩ vậy. –

+1

Bạn có thể di chuyển mã 'ValidNumber = new Control ('', CustomValidators.number ({min: 1, max: 10}))' vào một chỉ thị, sau đó bạn có thể sử dụng theh '* ngFor' iteration và không cần một số khác trong mã của bạn. –

+2

Đối với phiên bản hiện tại của Angular2 (2.2.x), Điều khiển phải là FormControl và [ngFormControl] phải là [formControl] – isevcik

Các vấn đề liên quan