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 ...)
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 ...)
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
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
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.
tự giải quyết. ** html ** '' ** ts ** 'controlName.updateValue (giá trị) '(giá trị được thiết lập thông qua FileReader) –
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
@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. –