如何有条件地要求使用AngularJS输入表单?


234

假设我们正在使用AngularJS构建通讯簿应用程序(设计示例)。

我们有一个联系人表单,其中包含电子邮件和电话号码的输入,我们想要一个或另一个,但不能同时要求两个:我们只希望输入为空或无效的情况下email才需要phone输入,反之亦然。

Angular有一个required指令,但是从文档中尚不清楚在这种情况下如何使用它。那么,我们如何有条件地需要一个表单字段呢?编写自定义指令?

Answers:


463

无需编写自定义指令。Angular的文档很好,但不完整。实际上,有一个名为的指令ngRequired,它带有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' />  

这是一个更完整的示例:http : //jsfiddle.net/uptnx/1/


5
应该没问题吧?只需相应地更新条件。如果您能解释一下您需要什么,我(或这里的其他人)将能够告诉您:)
Puce

1
附带说明,您也可以使用函数并在其中执行更复杂的逻辑。
Leandro Zubrezki,2015年

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

对于Angular2

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

编辑:这将引发一个控制台错误“ ExpressionChangedAfterItHasBeenCheckedError:表达式已被检查后已更改”。当我选中单选按钮时,我正在应用此功能,但是它似乎确实在进行条件验证。
Eric Soyke '18

4
Angular2 +没有在此问题上标记。由于本质上是一个不同的框架,因此此答案无关紧要。
isherwood '18

1
@isherwood你是对的。我添加了它,是因为我在这里进行了搜索。如果它被否决或引起争议,我将删除它。
laffuste

@Iaffuste,您可以发布有关Angular2 +的新问题并进行回复,以使关注此问题的人们更加轻松。+1仍然=)
arjel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.