Форма ViewChild не получает значение поля ввода в компоненте

Кодекс объясняет проблему. Я не могу использовать #myForm для доступа к проверке поля ввода из контроллера с помощью ViewChild this.myForm.name

        <form role="form" name="myForm" #myForm="ngForm">
           <div>...
             <div>....
               <input #name=ngModel type="text"/>
               <div class="error" *ngIf="!name.valid && (!name.untouched || showErrors)">Please enter a recipient name</div>
             </div>
           </div>
         </form>

Теперь контроллер:

 export class A imports .... {
      @ViewChild('myForm') myForm;

      private validate() {
        // this.myForm.name is undefined. I don't know why.
        if (this.myForm.name && this.myForm.name.$invalid) {
          return;
        }
      }
 }

2 ответа

1) Вы должны добавить директиву ngModel к вашему входу и добавить атрибут name, как показано ниже.

<input #name="ngModel" ngModel type="text" name="name" />

Почему "ngModel"? Свойство exportAs директивы сообщает Angular, как связать ссылочную переменную с директивой. Вы устанавливаете name в ngModel, потому что свойство exportAs директивы ngModel оказывается "ngModel".

2) В вашем компоненте вы должны использовать.controls.name вместо.name

if (this.myForm.controls.name && this.myForm.controls.name.$invalid) {
   return;
}

Я думаю, что есть одна опечатка: #name=ngModel должно быть довольно #name="ngModel"

Другие вопросы по тегам