ฉันจะต้องการอินพุตแบบฟอร์มที่มีเงื่อนไขด้วย AngularJS ได้อย่างไร


234

สมมติว่าเรากำลังสร้างแอปพลิเคชันสมุดที่อยู่ (ตัวอย่างที่คาดการณ์ไว้) กับ AngularJS

เรามีแบบฟอร์มสำหรับผู้ติดต่อที่มีอินพุตสำหรับอีเมลและหมายเลขโทรศัพท์และเราต้องการที่จะใช้อย่างใดอย่างหนึ่งแต่ไม่ใช่ทั้งสองอย่าง : เราต้องการเฉพาะemailอินพุตที่ต้องการหากphoneอินพุตว่างหรือไม่ถูกต้องและในทางกลับกัน

Angular มีrequiredคำสั่ง แต่ยังไม่ชัดเจนจากเอกสารวิธีใช้งานในกรณีนี้ ดังนั้นเราจะต้องใช้ฟิลด์แบบฟอร์มตามเงื่อนไขได้อย่างไร เขียนคำสั่งที่กำหนดเอง?

คำตอบ:


463

ไม่จำเป็นต้องเขียนคำสั่งที่กำหนดเอง เอกสารของ Angular นั้นดี แต่ไม่สมบูรณ์ ในความเป็นจริงมีคำสั่งที่เรียกngRequiredว่าการแสดงออกเชิงมุม

<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' />  

นี่คือตัวอย่างที่สมบูรณ์มากขึ้น: http://jsfiddle.net/uptnx/1/


5
ไม่น่าจะมีปัญหาใช่มั้ย เพียงแค่อัปเดตเงื่อนไขให้สอดคล้องกัน ถ้าคุณจะอธิบายสิ่งที่คุณต้องการมากขึ้นอีกนิดผม (หรือคนอื่น ๆ ที่นี่) จะสามารถที่จะแสดงให้คุณ :)
Puce

1
คุณสามารถใช้ฟังก์ชั่นและทำตรรกะที่ซับซ้อนได้มากขึ้น
Leandro Zubrezki

1
คุณลักษณะนี้ได้รับการบันทึกไว้โดยตอนนี้: docs.angularjs.org/api/ng/directive/ngRequired
bjunix

25

หากคุณต้องการใส่ข้อมูลที่จำเป็นหากมีการเขียนอื่น ๆ :

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

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

ความนับถือ.


14

ง่าย ๆ ที่คุณสามารถใช้การตรวจสอบเชิงมุมเช่น:

 <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' /> 

ตอนนี้คุณสามารถเติมค่าในช่องข้อความเดียวเท่านั้น คุณสามารถเติมชื่อหรือนามสกุลได้ ด้วยวิธีนี้คุณสามารถใช้การเติมที่ต้องการตามเงื่อนไขใน AngularJs


เรายังสามารถเติมทั้งสองฟิลด์ได้ใช่ไหม
myTerminal

ใช่ผู้ใช้สามารถกรอกข้อมูลทั้งสองฟิลด์ได้เช่นกันหากผู้ใช้กรอกหนึ่งฟิลด์ฟิลด์อื่นจะไม่บังคับ
Bipin Shilpakar

13

สำหรับเชิงมุม 2

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

แก้ไข: นี่คือการโยนข้อผิดพลาดคอนโซล "ExpressionChangedAfterItHasBeenCheckedError: การแสดงออกมีการเปลี่ยนแปลงหลังจากที่มันถูกตรวจสอบ" เมื่อฉันตรวจสอบปุ่มตัวเลือกที่ฉันใช้ในนี้ แต่ดูเหมือนว่าจะทำการตรวจสอบความถูกต้องตามเงื่อนไข
Eric Soyke

4
Angular2 + ไม่ได้ติดแท็กสำหรับคำถามนี้ เนื่องจากเป็นเฟรมเวิร์กที่แตกต่างกันคำตอบนี้จึงไม่เกี่ยวข้อง
isherwood

1
@isherwood คุณพูดถูก ฉันเพิ่มเพราะฉันสิ้นสุดที่นี่ในขณะที่ googling สำหรับสิ่งนั้น ฉันจะลบมันถ้ามันได้รับการลงคะแนนหรือแย้ง
laffuste

@Iaffuste คุณสามารถโพสต์และตอบคำถามใหม่สำหรับ Angular2 + เพื่อให้ง่ายสำหรับผู้ที่กำลังมองหาสิ่งนี้ +1 ต่อไป =)
arjel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.