Получение «Невозможно прочитать значение свойства неопределенного значения» в свойстве formControlName

Я использую Angular 7 и Google Material Design и следовал этому руководству для реактивных форм: https://angular.io/guide/reactive-forms#step-1-creating-a-formgroup-instance.

Я использовал formGroup вместе с formControlName. Вот мой файл логин.component.ts:

import { Component, OnInit } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {

  constructor() { }

  loginForm = new FormGroup({
    email: new FormControl(''),
    password: new FormControl(''),
  });

  ngOnInit() {
  }

  onSubmit() : void {
    console.info(this.loginForm.value);
  }
}

Вот мой логин.component.html:

<mat-card class = "login-card">
    <mat-card-header>
        <mat-card-title>Login</mat-card-title>
    </mat-card-header>
    <mat-card-content>
        <form [formGroup] = "loginForm" class = "login-form" (ngSubmit) = "onSubmit()">
            <table class = "login-full-width" cellspacing = "0">
                <tr>
                    <td>
                        <mat-form-field class = "login-full-width">
                            <input matInput type = "text" formControlName = "email" placeholder = "Email" required>
                        </mat-form-field>
                    </td>
                </tr>
                <p>
                    Value: {{email.value}}
                </p>
                <tr>
                    <td>
                        <mat-form-field class = "login-full-width">
                            <input matInput formControlName = "password" placeholder = "Password" type = "password" required>
                        </mat-form-field>
                    </td>
                </tr>
            </table>
        </form>
        <mat-spinner [style.display] = "showSpinner ? 'block' : 'none'"></mat-spinner>
    </mat-card-content>
    <mat-card-actions>
        <button mat-raised-button [disabled] = "!loginForm.valid" color = "primary">Login</button>
    </mat-card-actions>
</mat-card>

Это ошибка, которую я получаю при переходе на страницу входа:

LoginComponent.html:11 ERROR TypeError: Cannot read property 'value' of undefined
at Object.eval [as updateRenderer] (LoginComponent.html:15)
at Object.debugUpdateRenderer [as updateRenderer] (core.js:23937)
at checkAndUpdateView (core.js:23312)
at callViewAction (core.js:23548)
at execComponentViewsAction (core.js:23490)
at checkAndUpdateView (core.js:23313)
at callViewAction (core.js:23548)
at execEmbeddedViewsAction (core.js:23511)
at checkAndUpdateView (core.js:23308)
at callViewAction (core.js:23548)

Это строка 11 логин.component.html:

<input matInput type = "text" formControlName = "email" placeholder = "Email" required>

Я следовал инструкциям шаг за шагом, и это было очень просто. Я пропустил что-то здесь, что вызывает ошибку?

Это строка, вызывающая проблему <p> Value: {{email.value}} </p>, не определена

penleychan 30.05.2019 19:32

Шаблон может быть отображен до инициализации класса, поэтому вам необходимо проверить значение. В шаблонах вы должны иметь возможность использовать {{ email?.value }} или {{ email && email.value }} в зависимости от вашего стека.

ps2goat 30.05.2019 19:34

где email должен быть определен? это определенно не тот шаблон, что в учебнике

Jota.Toledo 30.05.2019 19:36
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
3
805
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

В вашем классе нет свойства электронной почты. Вы должны получить доступ к значению формы через группу форм, например:

<p>
 Value: {{loginForm.get('email').value}}
</p>

Вы пытаетесь получить доступ к переменной, которую не определили в своем классе LoginComponent. Если вы хотите сопоставить значение вашего ввода только для целей отладки, вы можете использовать переменные шаблона. Вы просто добавляете один в свой тег ввода следующим образом: #email

Проверьте эту официальную документацию Angular

Лучшим подходом будет:

 <input  type = "text"  [formControl] = "loginForm.controls.email" placeholder = "Email" required>

{{loginForm.controls.email.value}}

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