2

I created a form with two input repeated for X elements. Each element is required only if we put something in the other one:

My.HTML

<form ng-submit="validate();">
 <div ng-reapet="elem in Myelements">
  <label>{{elem.name}}</label>
  <div>
    New Value : <input name="value" ng-required="reason.$valid" ng-model="elem.value" />
  </div>
  <div>
    Why : <textarea name="reason" ng-required="value.$valid" ng-model="elem.reason"/>
  </div>
 </div>  
 <input type="submit" value="Submit" />
</form>

This not working as expected. How do I make this work properly ?

EDIT The right solution for me (the accepted answer helped me)

<form ng-submit="validate();">
    <div ng-reapet="elem in Myelements">
        <label>{{elem.name}}</label>
        <div>
            New Value : <input name="value" ng-required="elem.reason" ng-model="elem.value" />
        </div>
        <div>
            Why : <textarea name="reason" ng-required="elem.value" ng-model="elem.reason"/>
        </div>
    </div>  
    <input type="submit" value="Submit" />
</form> 
1

1 Answer 1

1

Just pivot off the other inputs value

<form ng-submit="validate();">
    <div ng-reapet="elem in Myelements">
        <label>{{elem.name}}</label>
        <div>
            New Value : <input name="value" ng-required="elem.reason !== ''" ng-model="elem.value" />
        </div>
        <div>
            Why : <textarea name="reason" ng-required="elem.value !== ''" ng-model="elem.reason"/>
        </div>
    </div>  
    <input type="submit" value="Submit" />
</form> 
Sign up to request clarification or add additional context in comments.

4 Comments

can't you just do ng-require="elem.value" ? shouldn't it work the same?
Depends on how they're set, if either of them are set to number 0 via the controller then that won't work. I like to be explicit. console.log(0 ? true : false) === false
Thanks to you're help, both of you. ng-require="elem.value" work perfectly fine. ng-required="elem.value !== ''" block every time.
For the !== '', you just have to pre-set it to '' in the controller.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.