Angular UI Components Documentation
Angular Validator Component
The Validator component for Angular represents a jQWidgets plugin used for validating html forms using JavaScript.
1. Installation
The easiest way to get started with jQWidgets UI for Angular is to use the Angular CLI Tool. To scaffold your project structure, follow its installation instructions.npm install -g @angular/cli ng new jqwidgets-project cd jqwidgets-project
Install jQWidgets
jQWidgets Angular UI comes packaged with Angular CLI schematics to make creating Angular applications easier. Schematics are included with both @angular/cdk and jqwidgets-ng. Once you install the npm packages, they will be available through the Angular CLI.Angular CLI supports the addition of packages through the ng add command. The ng add command provides faster and more user-friendly package installation. To install the jQWidgets UI for Angular package, use ng add and add the name of the NPM package:
ng add jqwidgets-ng
Alternatively, you can use the standard installation (Manual Setup)
jQWidgets UI for Angular is distributed as jqwidgets-ng NPM package
- Download and install the package.
npm install jqwidgets-ng
- Adding CSS reference
The following CSS file is available in ../node_modules/jqwidgets-ng/ package folder. This can be referenced in [src/styles.css] using following code.@import 'jqwidgets-ng/jqwidgets/styles/jqx.base.css';
Another way to achieve the same is to edit the angular.json file and in the styles add the style."styles": [ "node_modules/jqwidgets-ng/jqwidgets/styles/jqx.base.css" ]
2. Add the HTML for jQWidgets component in src/app/app.component.html
app.component.html
<jqxExpander [theme]="'fluent'" [width]="350" [showArrow]="false" [toggleMode]="'none'">
<div><h3 style="padding: 0; margin: 0;">Register</h3></div>
<div style="padding: 5px;">
<jqxValidator #myValidator [rules]="rules">
<form id='form' action="./">
<table class="register-table">
<tbody>
<tr>
<td>Username:</td>
<td><jqxInput [theme]="'fluent'" class="userInput text-input" [width]="195" [height]="22"></jqxInput></td>
</tr>
<tr>
<td>Password:</td>
<td><jqxPasswordInput [theme]="'fluent'" #passwordInput class="passwordInput text-input" [width]="195" [height]="22"></jqxPasswordInput></td>
</tr>
<tr>
<td>Confirm password:</td>
<td><jqxPasswordInput [theme]="'fluent'" #confirmPasswordInput class="passwordConfirmInput text-input" [width]="195" [height]="22"></jqxPasswordInput></td>
</tr>
<tr>
<td>Real name:</td>
<td><jqxInput [theme]="'fluent'" [width]="195" [height]="22" class="realNameInput text-input"></jqxInput></td>
</tr>
<tr>
<td>Birth date:</td>
<td><jqxDateTimeInput [theme]="'fluent'" #dateTimeInput [width]="195" [height]="22" [value]="initialDate" class="birthInput"></jqxDateTimeInput></td>
</tr>
<tr>
<td>E-mail:</td>
<td><jqxInput [theme]="'fluent'" class="emailInput text-input" [width]="195" [height]="22"></jqxInput></td>
</tr>
<tr>
<td>SSN:</td>
<td><jqxMaskedInput [theme]="'fluent'" [width]="195" [height]="22" [mask]="'###-##-####'" class="ssnInput"></jqxMaskedInput></td>
</tr>
<tr>
<td>Phone:</td>
<td><jqxMaskedInput [theme]="'fluent'" [width]="195" [height]="22" [mask]="'(###)###-####'" class="phoneInput"></jqxMaskedInput></td>
</tr>
<tr>
<td>Zip code:</td>
<td><jqxMaskedInput [theme]="'fluent'" [width]="195" [height]="22" [mask]="'###-##-####'" class="zipInput"></jqxMaskedInput></td>
</tr>
<tr>
<td colspan="2" style="padding-left: 100px; padding-top: 10px; padding-bottom: 10px;">
<jqxCheckBox [theme]="'fluent'" [width]="130" id="acceptCheckBox">I accept terms</jqxCheckBox>
</td>
</tr>
<tr>
<td colspan="2" style="padding-left: 20px;">
<jqxButton [theme]="'fluent'" #SendButton
(onClick)="sendButton()"
style="text-align: center; margin-left: 8em;"
[width]="60" [height]="25">
Send
</jqxButton>
</td>
</tr>
</tbody>
</table>
</form>
</jqxValidator>
</div>
</jqxExpander>
3. Setup Component Logic
app.component.ts
import { Component, ViewChild, ViewEncapsulation } from '@angular/core';
import { jqxPasswordInputComponent, jqxPasswordInputModule } from 'jqwidgets-ng/jqxpasswordinput';
import { jqxDateTimeInputComponent, jqxDateTimeInputModule } from 'jqwidgets-ng/jqxdatetimeinput';
import { jqxCheckBoxComponent, jqxCheckBoxModule } from 'jqwidgets-ng/jqxcheckbox';
import { jqxValidatorModule, jqxValidatorComponent } from 'jqwidgets-ng/jqxvalidator';
import { jqxButtonModule } from 'jqwidgets-ng/jqxbuttons';
import { jqxMaskedInputModule, jqxMaskedInputComponent } from 'jqwidgets-ng/jqxmaskedinput';
import { jqxInputModule } from 'jqwidgets-ng/jqxinput';
@Component({
selector: 'app-root',
imports: [jqxValidatorModule, jqxInputModule, jqxMaskedInputModule, jqxButtonModule, jqxDateTimeInputModule, jqxPasswordInputModule, jqxCheckBoxModule],
standalone: true,
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
encapsulation: ViewEncapsulation.None
})
export class AppComponent {
@ViewChild('myValidator') myValidator: jqxValidatorComponent;
@ViewChild('dateTimeInput') dateTimeInput: jqxDateTimeInputComponent;
@ViewChild('passwordInput') passwordInput: jqxPasswordInputComponent;
@ViewChild('confirmPasswordInput') confirmPasswordInput: jqxPasswordInputComponent;
initialDate: Date = new Date(2017, 8, 1);
sendButton(): void {
this.myValidator.validate(document.getElementById('form'));
}
rules =
[
{ input: '.userInput', message: 'Username is required!', action: 'keyup, blur', rule: 'required' },
{ input: '.userInput', message: 'Your username must be between 3 and 12 characters!', action: 'keyup, blur', rule: 'length=3,12' },
{ input: '.realNameInput', message: 'Real Name is required!', action: 'keyup, blur', rule: 'required' },
{ input: '.realNameInput', message: 'Your real name must contain only letters!', action: 'keyup', rule: 'notNumber' },
{ input: '.realNameInput', message: 'Your real name must be between 3 and 12 characters!', action: 'keyup', rule: 'length=2,12' },
{
input: '.birthInput', message: 'Your birth date must be between 1/1/1900 and 1/1/2020.', action: 'valueChanged',
rule: (input: any, commit: any): any => {
let date = this.dateTimeInput.value();
let result = date.getFullYear() >= 1900 && date.getFullYear() <= 2020;
return result;
}
},
{ input: '.passwordInput', message: 'Password is required!', action: 'keyup, blur', rule: 'required' },
{ input: '.passwordInput', message: 'Your password must be between 4 and 12 characters!', action: 'keyup, blur', rule: 'length=4,12' },
{ input: '.passwordConfirmInput', message: 'Password is required!', action: 'keyup, blur', rule: 'required' },
{
input: '.passwordConfirmInput', message: 'Passwords doesn\'t match!', action: 'keyup, focus',
rule: (input: any, commit: any): boolean => {
if (this.passwordInput.val() === this.confirmPasswordInput.val()) {
return true;
}
return false;
}
},
{ input: '.emailInput', message: 'E-mail is required!', action: 'keyup, blur', rule: 'required' },
{ input: '.emailInput', message: 'Invalid e-mail!', action: 'keyup', rule: 'email' },
{ input: '.ssnInput', message: 'Invalid SSN!', action: 'valuechanged, blur', rule: 'ssn' },
{ input: '.phoneInput', message: 'Invalid phone number!', action: 'valuechanged, blur', rule: 'phone' },
{ input: '.zipInput', message: 'Invalid zip code!', action: 'valuechanged, blur', rule: 'zipCode' },
{ input: '#acceptCheckBox', message: 'You have to accept the terms', action: 'change', rule: 'required', position: 'right:217,0' }
];
}