Az Angular-t a Bootstrap érvényesség ellenőrzésével szeretnénk használni.
Alapértelmezetten a Bootstrap a HTML elemek attribútumait figyeli ellenőrzések során. Például:
<input required>
Nem használhatjuk a [disabled] attribútumot:
<button [disabled]="employeeForm.invalid">
A érvényesség ellenőrzés a gomb kattintására indul el.
Be kell illesztenünk egy JavaScript kódot a működéshez. A kód a Bootstrap weboldaláról van, de két helyen ki kell egészíteni típussal.
ngOnInit() { this.empForm = this.builder.group({ firstName: new FormControl('', [Validators.required, Validators.minLength(2)]), lastName: new FormControl('', [Validators.required, Validators.minLength(2)]), username: new FormControl('', [Validators.required, Validators.minLength(3)]), city: new FormControl('', [Validators.required, Validators.minLength(3)]), state: new FormControl('', [Validators.required]), zip: new FormControl('', [Validators.required, Validators.pattern('^[0-9]{5}$')]), terms: new FormControl(false, [Validators.requiredTrue]) }); // Example starter JavaScript for disabling form submissions if there are invalid fields (() => { 'use strict' // Fetch all the forms we want to apply custom Bootstrap validation styles to const forms = document.querySelectorAll('.needs-validation') // Loop over them and prevent submission Array.from(forms).forEach((form: any) => { form.addEventListener('submit', (event:Event) => { if (!form.checkValidity()) { event.preventDefault() event.stopPropagation() } form.classList.add('was-validated') }, false) }) })() }
Az eredeti Bootstrap weboldalon található mintához tettünk a form needs-validation osztályt, és a @ jelet lecseréltük a következőre: @
<form class="row g-3 needs-validation"> <div class="col-md-4"> <label for="validationDefault01" class="form-label">First name</label> <input type="text" class="form-control" id="validationDefault01" value="Mark" required> </div> <div class="col-md-4"> <label for="validationDefault02" class="form-label">Last name</label> <input type="text" class="form-control" id="validationDefault02" value="Otto" required> </div> <div class="col-md-4"> <label for="validationDefaultUsername" class="form-label">Username</label> <div class="input-group"> <span class="input-group-text" id="inputGroupPrepend2">@</span> <input type="text" class="form-control" id="validationDefaultUsername" aria-describedby="inputGroupPrepend2" required> </div> </div> <div class="col-md-6"> <label for="validationDefault03" class="form-label">City</label> <input type="text" class="form-control" id="validationDefault03" required> </div> <div class="col-md-3"> <label for="validationDefault04" class="form-label">State</label> <select class="form-select" id="validationDefault04" required> <option selected disabled value="">Choose...</option> <option>...</option> </select> </div> <div class="col-md-3"> <label for="validationDefault05" class="form-label">Zip</label> <input type="text" class="form-control" id="validationDefault05" required> </div> <div class="col-12"> <div class="form-check"> <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required> <label class="form-check-label" for="invalidCheck2"> Agree to terms and conditions </label> </div> </div> <div class="col-12"> <button class="btn btn-primary" type="submit">Submit form</button> </div> </form>
Az űrlap továbbiakban ki kell egészíteni, például a form elemet:
[formGroup]="empForm"
Az input elemeket:
formControlName="firstName"
Az angular ng-valid, ng-invalid és hasonló attribútumokat használ. A Bootstrap az is-valid és az is-invalid attribútumokkal dolgozik. Az Angular ugyan nem hoz létre ilyen attribútumokat alapértelmezetten, de néhány sorral megoldható, hogy létrejöjjenek.
Település esetén például:
[class.is-invalid]="employeeForm.get('city')?.invalid && employeeForm.get('city')?.touched" [class.is-valid]="employeeForm.get('city')?.valid && employeeForm.get('city')?.touched"
Kicsit több az input elemből:
<div> <label for="city" class="form-label">Település</label> <input id="city" formControlName="city" class="form-control" [class.is-invalid]="employeeForm.get('city')?.invalid && employeeForm.get('city')?.touched" [class.is-valid]="employeeForm.get('city')?.valid && employeeForm.get('city')?.touched" /> <div class="invalid-feedback">Nem megfelelő település</div> <div class="valid-feedback">Jónak látszik</div> </div>