Validation Controller
So far, the functionalities of the @aurelia/validation
have been discussed. The part regarding the integration with a view has been kept out of the discussion so far. This section starts addressing that.
The validation controller is the implementation of IValidationController
interface. It acts as a bridge between the validator and the other related components, such as view, binding, and subscribers. The capabilities of the validation controller are discussed below.
Injecting a controller instance
An instance of the validation controller can be injected using resolve(newInstanceForScope(IValidationController))
, and resolve(IValidationController)
. The newInstanceForScope(IValidationController)
resolver creates a new instance of the validation controller and registers the instance with the dependency injection container. This same instance can later be made available to the child components using resolve(IValidationController)
.
A new instance of validation controller can always be injected using the newInstanceOf(IValidationController)
resolver. See this action in the demo below.
validate
and reset
validate
and reset
The validate
method can be used to explicitly/manually perform the validation. The usage examples are as follows.
The reset
method on the other hand removes the errors from the validation controller. It also has an optional argument of type ValidateInstruction
which when provided instructs the controller to remove errors for specific object, and/or properties. Note that other properties of the instruction object has no effect on resetting the errors.
revalidateErrors
revalidateErrors
With the revalidateErrors
method, verifying whether the current errors are still there is possible. It does not validate all objects and bindings, as it is done in validate
method. It is useful when you don't want to get a new set of errors and rather check on the current status of the existing set of errors.
addObject
and removeObject
addObject
and removeObject
The method addObject
registers an object explicitly to the validation controller. The validation controller automatically validates the object every time the validate
method is called. This is useful when you can validate some object in your view model that does not have any direct reference to the view.
The object can be unregistered by calling the removeObject
method. This also removes the associated errors of the object.
addError
and removeError
addError
and removeError
Use the addError
method to manually add an error to the controller. The signature of this method is as follows.
Note that this method returns an instance of ValidationResult
which later can be used with removeError
to clear the error.
Note that the errors added by the addError
method, never gets revalidated when revalidateErrors
is called. If the error needs to be removed, it must be done using removeError
method.
addSubscriber
and removeSubscriber
addSubscriber
and removeSubscriber
The subscribers can be added or removed using addSubscriber
and removeSubscriber
methods respectively. Whenever the validation controller performs validation or resets errors, the registered subscribers are notified of the change in validation results. To unsubscribe from the validation results notification, the subscriber needs to be removed.
The subscriber interface is rather simple, consisting of only one method.
The notification event data looks loosely like the following.
What the subscribers do with the event data depends on the subscribers. An obvious use case is to present the errors to the end users. In fact, the out-of-the-box subscribers are used for that purpose only. Below is one example of how you can create a custom subscriber.
Last updated
Was this helpful?