Migration Guide & Breaking Changes
Creating and customing Aurelia Validation rules to ensure data is validated.
This section outlines the breaking changes introduced by
@aurelia/validation*
as compared to the predecessor aurelia-validation
. However, it is recommended that you read the documentation, as many new features have been added.Instead of a single validation package, the functionalities are arranged in three different packages. These are
@aurelia/validation
(provides core functionalities), @aurelia/validation-html
(provides integration with the view), and @aurelia/validation-i18n
(provides localization support for validation in view).Usage of
ValidationRules
in terms of defining rules is a bit different. The example below shows the difference. Refer to the Defining rules section for the details.// aurelia-validation
ValidationRules
.ensure('firstName')
.required()
.on(this.person);
// @aurelia/validation
import { IValidationRules } from '@aurelia/validation';
//...
constructor(
@IValidationRules validationRules: IValidationRules
) {
ValidationRules
.on(this.person)
.ensure('firstName')
.required();
}
Named registration of reusable custom rules is no longer supported in favor of simply using an instance of the rule implementation. The example below shows the difference. Refer to the Customizing rules section for the details.
// aurelia-validation
ValidationRules.customRule(
'customRule',
// rule body
// rule config
);
ValidationRules
.ensure('property')
.satisfiesRule('customRule' ...);
// @aurelia/validation
class CustomRule extends BaseValidationRule { // of implements IValidationRule
// rule config
public execute() {
// rule body
}
}
validationRules
.on(obj)
.ensure('property')
.satisfiesRule(new CustomRule(...));
The validator interface has been changed to have only one
validate
method equipped with validation instructions. Refer to the Validator and validate instruction section for the details.The usage of the validation controller factory is changed. Instead of using
controllerFactory.createForCurrentScope();
, you need to use the argument decorator @newInstanceForScope(IValidationController)
syntax. Refer to the Injecting a controller instance section for the details.No validation renderer in favor of
ValidationResultsSubscriber
. Refer to the addSubscriber
and removeSubscriber
section for the details.Last modified 29d ago