Проверка формы на основе шаблона Angular: следует ли публиковать ngModel или form.value?

Это вопрос о передовой практике проверки форм на основе шаблонов Angular 2+.

Когда у меня есть

<form #form="ngForm">
    firstname : <input [(ngModel)]="user.firstname" name="firstname" />
    <button [disabled]="form.invalid" (click)="post()">Post</button>
</form>

Я должен делать

post() {
    this.userService.post(this.user);
}

Or

post() {
    this.userService.post(this.form.value);
}

?


person Julien    schedule 17.07.2018    source источник


Ответы (2)


Если ваш объект сущности (пользователь в вашем примере) имеет какие-либо свойства, такие как идентификатор, которые не включены в форму...

Этот код:

post() {
    this.userService.post(this.form.value);
}

Не будет включать их. Таким образом, например, он не будет включать идентификатор пользователя.

Этот код:

post() {
    this.userService.post(this.user);
}

Будет включать все свойства пользователя.

Вы можете увидеть это, определив свой объект сущности следующим образом:

export interface IUser {
    id: number;
    firstname: string;
    lastname: string;
    isAdmin: boolean;
}

Добавьте имя и фамилию в свою форму, как вы делали выше, а затем добавьте в свое сообщение следующее:

    console.log('form: ' + JSON.stringify(this.form.value));
    console.log('entity: ' + JSON.stringify(this.user));
person DeborahK    schedule 17.07.2018

Я предлагаю вам перейти на реактивную форму.

С другой стороны

форма на основе шаблона

логика проверки формы не может быть протестирована. Единственный способ проверить эту логику — запустить сквозной тест в браузере, например, с помощью безголового браузера, такого как PhantomJs..

person Akj    schedule 17.07.2018
comment
Спасибо, я мог бы сделать это, да. Но мой вопрос был не о модульном тестировании. - person Julien; 17.07.2018
comment
я просто привожу пример недостатка формы, управляемой шаблоном. благодарю вас - person Akj; 17.07.2018