2016-09-24 17 views
9

Tôi đang cố gắng sử dụng disabled bên trong biểu mẫu hướng mô hình của mình. Tôi có dạng sau:Sử dụng tính năng vô hiệu hóa với biểu mẫu hướng mô hình

this.form = this.formBuilder.group({ 
    val1: ['', Validators.required], 
    val2: [{value:'', disabled:this.form.controls.val1.valid}] 
}); 

tôi nhận được một lỗi (không tìm thấy controls của this.form) có lẽ vì tôi đang sử dụng this.form bên this.form.

Tôi làm cách nào để khắc phục điều đó?

PS Tôi cũng đã cố gắng thêm [disabled]='...' bên trong html của tôi, nhưng tôi nhận được một cảnh báo nói rằng tôi nên sử dụng formBuilder thay

+0

hey không phải là nó phải được 'VAL1: fb.control ('', Validators.required) 'và bạn phải thay đổi val 2 là tốt? – Ced

+0

@Ced bạn có thể đọc phần này: https://scotch.io/tutorials/using-angular-2s-model-driven-forms-with-formgroup-and-formcontrol#initialize-the-form-model – ncohen

+0

nó nói những gì tôi nói mặc dù. Dunno nếu tôi ra khỏi vòng lặp. Kiểm tra câu trả lời của tôi nếu nó hoàn toàn không phải là những gì bạn muốn sau đó tôi sẽ loại bỏ nó – Ced

Trả lời

20

Yea bạn nói đúng rằng vấn đề là bởi vì bạn đang tham khảo một biến (this.form) khi nó chưa được khởi tạo. May mắn, trong trường hợp của bạn, bạn không thực sự cần phải tham khảo nhóm biểu mẫu trong điều khiển biểu mẫu val2 của bạn. Mã của bạn có thể được viết lại như sau:

let val1Control = this.formBuilder.control('', Validators.required); 
this.form = this.formBuilder.group({ 
    val1: val1Control , 
    val2: [{value:'', disabled: val1Control.valid}] 
}); 

Tuy nhiên, khối này chỉ khởi giá trị disabled kiểm soát VAL2 mà không giám sát tính hợp lệ val1Control 's. Để làm điều đó, bạn sẽ cần phải đăng ký val1Control.statusChanges:

let val1Control = this.formBuilder.control('', Validators.required); 
let val2Control = this.formBuilder.control({value:'', disabled: !val1Control.valid}); 
this.form = this.formBuilder.group({ 
    val1: val1Control, 
    val2: val2Control 
}) 

val1Control.statusChanges.subscribe((newStatus) => { 
    if (val1Control.valid) { 
    val2Control.enable(); 
    } else { 
    val2Control.disable(); 
    } 
}); 

Đây là plunker làm việc: http://plnkr.co/edit/kEoX2hN9UcY4yNS3B5NF

+3

OUCH, đây là siêu tiết ... Tôi đã không mong đợi một 'khuyết tật 'được như vậy phức tạp! Dù sao, đó là giải pháp tốt nhất tôi đoán! Cảm ơn – ncohen

+0

Đáng yêu! Đã lưu thời gian của tôi. –

+3

Giúp tôi rất nhiều, cảm ơn bạn rất nhiều! Trong trường hợp của tôi (và nếu bạn muốn vô hiệu hóa mọi trường biểu mẫu) 'this.form.disable();' đã làm việc hoàn hảo! –

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