Как удалить пробелы из mat-input

У меня есть всплывающее окно для создания нового проекта. Я сохраняю запись нового проекта в кусте, который не поддерживает пробелы в имени таблицы. Так может кто-нибудь помочь мне поставить проверку в mat-input, чтобы удалить пробелы из поля inout.

HTML код

<form (ngSubmit) = "(submit)" #formControl = "ngForm">
                    <div class = "form">
                        <mat-form-field color = "accent">
                            <input
                                matInput
                                #input
                                class = "form-control"
                                placeholder = "name"
                                [(ngModel)] = "data.projectName"
                                name = "name"
                                [formControl] = "nameControl"
                                required
                                minlength = "4"
                                (ngModelChange) = "noWhiteSpaceOnChange()"
                            />
                            <mat-error
                                *ngIf = "nameControl.hasError('required')"
                                >Please Enter Name</mat-error
                            >
                            <mat-error
                                *ngIf = "nameControl.hasError('minlength')"
                                >You must enter atleast 4
                                characters</mat-error
                            >
                        </mat-form-field>
                    </div>

                    <!--Textarea for demo purposes-->
                    <div class = "form">
                        <mat-form-field color = "accent">
                            <textarea
                                matInput
                                #input
                                class = "form-control"
                                placeholder = "Description"
                                [(ngModel)] = "data.projectDescription"
                                name = "projectDescription"
                                required
                            ></textarea>
                            <mat-error *ngIf = "formControl.invalid">{{
                                getErrorMessage()
                            }}</mat-error>
                        </mat-form-field>
                    </div>

                    <div mat-dialog-actions>
                        <button
                            mat-button
                            [type] = "submit"
                            [disabled] = "!formControl.valid"
                            [mat-dialog-close] = "data"
                            (click) = "confirmAdd()"
                        >
                            Save
                        </button>
                        <button
                            mat-button
                            (click) = "onNoClick()"
                            tabindex = "-1"
                        >
                            Cancel
                        </button>
                    </div>
                </form>

Машинописный код:

import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material';
import { Component, Inject } from '@angular/core';
import { RecommendationService } from '../../../recommendation- 
service.service';
import { FormControl, Validators } from '@angular/forms';
import { Project } from '../../model/project';

@Component({
selector: 'app-add.dialog',
templateUrl: './add.dialog.html',
styleUrls: ['./add.dialog.scss']
})

export class AddDialogComponent {
formControl = new FormControl('', [
Validators.required
// Validators.email,
]);

constructor(public dialogRef: MatDialogRef<AddDialogComponent>,
@Inject(MAT_DIALOG_DATA) public data: Project,
public dataService: RecommendationService) { }


getErrorMessage() {
return this.formControl.hasError('required') ? 'Required field' :
  this.formControl.hasError('email') ? 'Not a valid email' :
    '';
}

submit() {
// emppty stuff
}

onNoClick() {
this.dialogRef.close();
}

public confirmAdd() {
this.addProject(this.data);
}
// DEMO ONLY, you can find working methods below
addProject(project: Project) {
return project;
}
}
class SaveData {
id: number;
title: String;
CreatedOn: String;
}

Обновлено: в соответствии с предложениями я использовал реактивную форму, но я все еще не могу понять

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

user4676340 15.01.2019 11:28
Тестирование функциональных 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
0
1
4 527
2

Ответы 2

вы можете создать собственный валидатор, а затем добавить валидатор в «контроль формы»

 whitespacecontrol(control: FormControl): { [s: string]: boolean } {
    if (control.value != null) {
      if (control.value.indexOf(' ') != -1) {

        return { 'whitespace': true };
      }
    }

    return null;
  }


formControl = new FormControl('', [
Validators.required,
this.whitespacecontrol.bind(this)
]);

и вы можете проверить с помощью formControl.invalid

Как сказал трише, вы должны очистить свой код и правильно использовать formControls. Вот как это сделать: https://angular.io/guide/reactive-forms

Когда вы используете formControls, вы можете предоставить валидатор шаблона:

new FormControl('', Validators.pattern(/^\S*$/))

Валидатор проверяет ваш ввод на соответствие регулярному выражению, запрещающему пробелы.

Если вы не хотите использовать валидаторы, вы также можете просто использовать someString.replace(/\s/g, "") для удаления всех пробелов перед отправкой формы.

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