¿Hay alguna forma preferida al seleccionar la validación usando
myForm.controls['name'].validmyForm.get('name').validya que ambos parecen ser solo sintácticamente diferentes pero logrando el mismo objetivo.
<label>Name <input type="text" formControlName="name"> </label> <div class="alert" *ngIf="!myForm.controls['name'].valid && myForm.controls['name'].touched"> {{ titleAlert }} </div>Igual que
<div class="alert" *ngIf="!myForm.get('name').valid && myForm.get('name').touched"> {{ titleAlert }} </div> Por lo que verifiqué en el código, get este código:
AbstractControl.prototype.get = function (path) { return _find(this, path, '.'); };Acabo de comenzar Angular, por lo que agradecería una opinión experta.
Al igual que lo que ha encontrado, FormGroup.get está diseñado para acceder al control de formulario de destino por su path . Y se usa más a menudo para situaciones complicadas ( incrustación de múltiples capas ), lo que facilita obtener el control de destino desde el formulario de inserción de múltiples capas y también hace que el código sea claro y fácil de entender.
Tome a continuación como ejemplo, simplemente puede acceder al primer elemento de FormArray incrustado mediante this.form.get('test.0') en lugar de this.form.controls.test.controls[0] :
this.form = this.formBuilder.group( { test: this.formBuilder.array( [ ['form control 1 in form array'], ['form control 1 in form array'], ... ] ) } );Esta pregunta está relacionada con: ¿El uso del método Angular Reactive Forms .get() en la plantilla causará llamadas de método innecesarias como un método de componente? .
En las plantillas, prefiero usar myForm.controls.name para evitar la llamada a la myForm.get('name') . Si el selector de campo es muy complejo, almacenaría el campo en un atributo de componente para que en la plantilla su acceso sea instantáneo.
En los controladores no debería importar demasiado usar uno u otro.