Làm thế nào tôi có thể yêu cầu điều kiện đầu vào mẫu với AngularJS?


234

Giả sử chúng tôi đang xây dựng một ứng dụng sổ địa chỉ (ví dụ giả định) với AngularJS.

Chúng tôi có một biểu mẫu cho các liên hệ có đầu vào cho email và số điện thoại và chúng tôi muốn yêu cầu cái này hoặc cái kia , nhưng không phải cả hai : Chúng tôi chỉ muốn emailđầu vào được yêu cầu nếuphone đầu vào trống hoặc không hợp lệ và ngược lại.

Angular có một requiredchỉ thị, nhưng không rõ tài liệu về cách sử dụng nó trong trường hợp này. Vì vậy, làm thế nào chúng ta có thể có điều kiện yêu cầu một trường mẫu? Viết một chỉ thị tùy chỉnh?

Câu trả lời:


463

Không cần phải viết một chỉ thị tùy chỉnh. Tài liệu của Angular là tốt nhưng không đầy đủ. Trong thực tế , có một lệnh được gọi ngRequired, có biểu thức Angular.

<input type='email'
       name='email'
       ng-model='contact.email' 
       placeholder='your@email.com'
       ng-required='!contact.phone' />

<input type='text'
       ng-model='contact.phone'             
       placeholder='(xxx) xxx-xxxx'
       ng-required='!contact.email' />  

Dưới đây là một ví dụ đầy đủ hơn: http://jsfiddle.net/uptnx/1/


5
Nó không phải là một vấn đề, phải không? Chỉ cần cập nhật các điều kiện cho phù hợp. Nếu bạn giải thích những gì bạn cần thêm một chút, tôi (hoặc người khác ở đây) sẽ có thể chỉ cho bạn :)
Puce 2/215

1
Là một lưu ý phụ, bạn cũng có thể sử dụng một hàm và thực hiện logic phức tạp hơn ở đó.
Leandro Zubrezki

1
Tính năng này được ghi lại vào lúc này: docs.angularjs.org/api/ng/directive/ngRequired
bjunix

25

nếu bạn muốn đặt một đầu vào cần thiết nếu khác được viết:

   <input type='text'
   name='name'
   ng-model='person.name'/>

   <input type='text'
   ng-model='person.lastname'             
   ng-required='person.name' />  

Trân trọng.


14

Đơn giản, bạn có thể sử dụng xác nhận góc như:

 <input type='text'
   name='name'
   ng-model='person.name'
   ng-required='!person.lastname'/>

   <input type='text'
   name='lastname'
   ng-model='person.lastname'             
   ng-required='!person.name' /> 

Bây giờ bạn có thể điền giá trị chỉ trong một trường văn bản. Hoặc bạn có thể điền tên hoặc họ. Theo cách này, bạn có thể sử dụng điền yêu cầu có điều kiện vào AngularJs.


Người ta vẫn có thể điền vào cả hai lĩnh vực, phải không?
myTerminal

có, người dùng có thể điền cả hai trường, trong điều kiện này nếu người dùng điền vào một trường, trường kia không bắt buộc
Bipin Shilpakar

13

Đối với Angular2

<input type='email' 
    [(ngModel)]='contact.email'
    [required]='!contact.phone' >

EDIT: Đây là lỗi của bảng điều khiển "ExpressionChangedAfterItHasBeenCheckedError: Biểu thức đã thay đổi sau khi được kiểm tra." khi tôi kiểm tra nút radio tôi đang áp dụng điều này, nhưng nó dường như thực hiện xác nhận có điều kiện.
Eric Soyke

4
Angular2 + không được gắn thẻ cho câu hỏi này. Vì về cơ bản là một khung khác nhau, câu trả lời này không liên quan.
isherwood

1
@isherwood bạn nói đúng. Tôi đã thêm nó bởi vì tôi đã kết thúc ở đây trong khi googling cho điều đó. Tôi sẽ xóa nó nếu nó bị hạ cấp hoặc gây tranh cãi.
laffuste

@Iaffuste bạn có thể đăng và trả lời một câu hỏi mới cho Angular2 + để giúp mọi người dễ dàng tìm hiểu điều này. +1 anyway =)
arjel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.