فرمهای مبتنی بر قالبها در Angular - قسمت چهارم - اعتبارسنجی ورودیها
نویسنده: وحید نصیری
تاریخ: ۱۳۹۶/۰۴/۰۳ ۸:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
| کلاس CSS اعتبارسنجی | توضیحات |
| ng-untouched | زمانیکه فرمی برای بار اول رندر میشود، تمام فیلدهای آن با کلاس CSS ایی به نام ng-untouched علامتگذاری میشوند. |
| ng-touched | همینقدر که کاربر با یک Tab از فیلدی عبور کند، با کلاس ng-touched مزین خواهد شد. بنابراین مهم نیست که حتما دادهای وارد شده باشد یا خیر. حتی عبور از یک فیلد نیز به معنای لمس آن نیز میباشد. |
| ng-pristine | مربوط به زمانیاست که یک فیلد نه تغییر کردهاست و نه لمس شدهاست. |
| ng-dirty | همینقدر که کاربر، تغییری را در فیلدی ایجاد کند، آن المان با کلاس ng-dirty مشخص خواهد شد. |
| ng-valid | برای حالت موفقیت آمیز بودن اعتبارسنجی، به آن المان انتساب داده میشود. |
| ng-invalid | برای حالت غیر موفقیت آمیز بودن اعتبارسنجی، به آن المان انتساب داده میشود. |
<div class="form-group">
<label>First Name</label>
<input #firstName required type="text" class="form-control" name="firstName" [(ngModel)]="model.firstName">
</div>
<h3>Classes</h3>
<h4>{{ firstName.className }}</h4>
<div class="form-group">
<label>First Name</label>
<input #firstName="ngModel" required type="text" class="form-control" name="firstName" [(ngModel)]="model.firstName">
</div>
<h4>dirty: {{ firstName.dirty }}</h4>
<div class="form-group">
<label>First Name</label>
<input #firstName="ngModel" #firstNameElement required type="text" class="form-control"
name="firstName" [(ngModel)]="model.firstName">
<div *ngIf="firstName.invalid && firstName.touched" class="alert alert-danger">
First Name is required.
</div>
</div>
<h4>className: {{ firstNameElement.className }}</h4>
<h4>dirty: {{ firstName.dirty }}</h4>
<h4>invalid: {{ firstName.invalid }}</h4>
<div class="form-group" [class.has-error]="firstName.invalid && firstName.touched"> <label class="control-label">First Name</label>
.ng-touched.ng-invalid{
border: 1px solid red;
} <input #firstName="ngModel" #firstNameElement required maxlength="3" minlength="2" pattern="^V.*" type="text" class="form-control" name="firstName" [(ngModel)]="model.firstName">
<div *ngIf="firstName.invalid && firstName.touched" class="alert alert-danger">
First Name is required.
</div> <div class="form-group" [class.has-error]="firstName.invalid && firstName.touched">
<label class="control-label">First Name</label>
<input #firstName="ngModel" #firstNameElement
required maxlength="3" minlength="2" pattern="^V.*"
type="text" class="form-control" name="firstName" [(ngModel)]="model.firstName">
<div *ngIf="firstName.invalid && firstName.touched">
<div class="alert alert-info">
errors: {{ firstName.errors | json }}
</div>
<div class="alert alert-danger" *ngIf="firstName.errors.required">
Name is required.
</div>
<div class="alert alert-danger" *ngIf="firstName.errors.minlength">
Name should be minimum {{firstName.errors.minlength.requiredLength}} characters.
</div>
<div class="alert alert-danger" *ngIf="firstName.errors.maxlength">
Name should be max {{firstName.errors.maxlength.requiredLength}} characters.
</div>
<div class="alert alert-danger" *ngIf="firstName.errors.pattern">
Name pattern: {{firstName.errors.pattern.requiredPattern}}
</div>
</div>
</div>
<option value="default">Select a Language...</option>
<div class="form-group" [class.has-error]="hasPrimaryLanguageError">
<label class="control-label">Primary Language</label>
<select class="form-control" name="primaryLanguage"
#primaryLanguage
(blur)="validatePrimaryLanguage(primaryLanguage.value)"
(change)="validatePrimaryLanguage(primaryLanguage.value)"
[(ngModel)]="model.primaryLanguage">
<option value="default">Select a Language...</option>
<option *ngFor="let lang of languages">
{{ lang }}
</option>
</select>
</div> export class EmployeeRegisterComponent {
hasPrimaryLanguageError = false;
validatePrimaryLanguage(value) {
if (value === 'default'){
this.hasPrimaryLanguageError = true;
}
else{
this.hasPrimaryLanguageError = false;
}
}
}
<form #form="ngForm" novalidate>
<h3> form.valid: {{ form.valid }}</h3> <button class="btn btn-primary" type="submit"
[disabled]="form.invalid">Ok</button> (function (app) {
'use strict';
function blackList() {
return {
require: 'ngModel',
link: function (scope, elem, attr, ngModel) {
var blacklist = attr.blackList.split(',');
ngModel.$validators.blackList = function (modelValue) {
if (modelValue == undefined)
return 0;
var valid = blacklist.indexOf(modelValue.toString()) === -1;
return valid;
};
}
};
};
app.directive("blackList", blackList);
})(angular.module('core')); <div [class.has-error]="blackList">
<label>Primary Language</label>
<select name="primaryLanguage" ngModel blackList='default' #primaryLanguage="ngModel">
<option value="default">Select a Language...</option>
<option *ngFor="let lang of languages">
{{ lang }}
</option>
</select>
<small [hidden]="primaryLanguage.valid">
Not Valid
</small>
</div> // student-model.ts
export interface Student {
id: number;
name: string;
} // app.component.ts
public model: Student;
ngOnInit(): void {
this.setDefaultValueForModel();
}
saveForm(form: NgForm, evetn: Event) {
evetn.preventDefault();
if (form.valid) {
alert('everything is ok');
}
}
setDefaultValueForModel() {
this.model = {
id: 1,
name: ''
};
} <form #form="ngForm" novalidate (submit)="saveForm(form,$event)">
<div>
<label>Name</label>
<input type="text" required name="name" autocomplete="off" [(ngModel)]="model.name" #name="ngModel">
<p [hidden]="name.valid || (name.pristine && !form.submitted)">
Name is required and should be minimum 4 characters.
</p>
</div>
<div>
<input type="submit" value="submit">
</div>
</form>