There’s no need to write a custom directive. Angular’s documentation is good but not complete. In fact, there is a directive called ngRequired
, that takes an Angular expression.
<input type="email"
name="email"
ng-model="contact.email"
placeholder="[email protected]"
ng-required='!contact.phone' />
<input type="text"
ng-model="contact.phone"
placeholder="(xxx) xxx-xxxx"
ng-required='!contact.email' />
Here’s a more complete example: http://jsfiddle.net/uptnx/1/