2016-01-21 12 views
13

ngControl với giá trị new Control('', Validators.required) không hoạt động ngay cả khi tệp hợp lệ.Làm cách nào để xác thực <input type = "file"> với Angular2?

(và trên thực tế, tôi thấy nó khó khăn để xác nhận nút radio cũng ...)

+1

tự giải quyết. ** html ** '' ** ts ** 'controlName.updateValue (giá trị) '(giá trị được thiết lập thông qua FileReader) –

+0

hey @Yusu bạn có thể trả lời câu hỏi của riêng bạn và cung cấp tất cả các mã có liên quan làm việc cho bạn ... ?? – hhsadiq

+0

@YuSu Bạn thực sự có thể vui lòng cung cấp tất cả các mã có liên quan không, vì tôi không thể làm như bạn nói. Nếu tôi thử với 'this.frm.patchValue ({file: evt.target.value});' Tôi nhận được: Không thể đặt thuộc tính 'value' trên 'HTMLInputElement': Phần tử đầu vào này chấp nhận tên tệp, có thể chỉ được lập trình thành chuỗi trống. –

Trả lời

5

Validators.required phụ thuộc vào giá trị của lĩnh vực này.

Loại đầu vào file không có giá trị, do đó được coi là undefined hoặc null.

Đó là lý do tại sao nó không hợp lệ. Tốt hơn bạn viết xác nhận của riêng bạn.

Đối với tập tin tùy chỉnh validation example refer

0

Một giải pháp tuyệt vời để giải quyết vấn đề này là tạo ra một yếu tố tùy chỉnh mà bọc của bạn và thực hiện một ValueAccessor. Bằng cách này, bạn có thể tạo thành phần tùy chỉnh hoạt động chính xác như các phần tử của biểu mẫu khác. Thay vì sử dụng giá trị đầu vào, bạn có thể sử dụng một biến khác bên trong thành phần của bạn.

biết thêm thông tin ở đây: Applying angular2 form directives to custom input form elements

1

Một ví dụ về validator để sử dụng với bình thường đòi hỏi thuộc tính có thể là một cái gì đó giống như

import { Provider, forwardRef, Directive } from '@angular/core'; 
import { NG_VALIDATORS, Validator, Control } from '@angular/common'; 
export const NO_ATTACHMENT_VALIDATOR = new Provider(NG_VALIDATORS,{ 
    useExisting: forwardRef(() => noAttachmentValidator), 
    multi: true 
}); 

@Directive({ 
    selector: '[noAttachmentValidator][ngControl],[noAttachmentValidator][ngFormControl],[noAttachmentValidator][ngModel]', 
    providers: [NO_ATTACHMENT_VALIDATOR] 
}) 

export class noAttachmentValidator implements Validator{ 
    public validate(control: Control) : { required: { [key: string]: boolean } | null } { 
    let state, 
     value = control.value, 
     alreadyUsed = control.dirty; 

    if(alreadyUsed && value.length == 0){ 
     state = true; 
    } 
    return state ? { required : { 'required' : false } } : null 
    } 
} 

thuộc tính cơ bản yêu cầu này được kiểm tra lần đầu tiên, điều này mỗi lần sau đó bạn đã sử dụng đầu vào lần đầu tiên, ngay cả khi bạn loại bỏ các tập tin (đó là vấn đề của tôi) gây ra sự kiểm soát của giá trị là cho null. Và khi nó không bị ảnh hưởng, nó sẽ bị lấp đầy khi bạn thêm một tệp, nhưng nếu bạn xóa nó, nó chỉ là một mảng trống, vì vậy []! == null. Tôi hy vọng điều này sẽ giúp bạn làm theo cách này, bạn có thể xây dựng loại xác thực của riêng bạn nếu bạn cần.

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