The ui:input*
components don't provide validation so you'll need to create the logic on your own. For example:
<ui:inputNumber aura:id="amount" label="Amount"
class="slds-input"
labelClass="slds-form-element__label"
value="{!v.myAmount}" required="true"/>
<lightning:button label="Submit"
onclick="{!c.submitForm}"/>
/** JS Controller **/
({
submitForm : function(component, event, helper) {
var myField = component.find("amount");
var val = myField.get("v.value");
if (isNaN(val)||val==''){
myField.set("v.errors", [{message:"Enter an amount."}]);
}
else {
myField.set("v.errors", null);
//other stuffs here
}
}
})
If you're curious, the new lightning:input
component not only provide Lightning Design System styling, but also provides the v.validity
attribute to check field validity states. Notice that you can add an aura:id
to the fields to group them together into an array. So you can do something like (example courtesy of @Eugene Kashida):
<lightning:input aura:id="field" label="First name" placeholder="First name" required="true" onchange="{! c.onChange }" />
<lightning:input aura:id="field" label="Last name" placeholder="Last name" required="true" onchange="{! c.onChange }" />
<lightning:button aura:id="submit" label="Submit" disabled="true" onclick="{! c.onClick }" />
({
onChange: function (cmp, evt, helper) {
var allValid = cmp.find('field').reduce(function (validSoFar, inputCmp) {
return validSoFar && inputCmp.get('v.validity').valid;
}, true);
cmp.find('submit').set('v.disabled', !allValid);
},
onClick: function (cmp, evt, helper) {
evt.preventDefault();
//other stuffs here
}
})
You can learn more about lightning:input
in the Lightning Components Developer Guide. Another difference between the ui:input*
and lightning:input
is that the latter doesn't support triggering of error messages programmatically (Spring '17). However, it does provide the ability to add custom error messages for common uses cases as you'll see in the Dev Guide.